pkgsvr_url = option[:url]
pkgsvr_addr = svr_result[0]
pkgsvr_port = svr_result[1]
- BuildServerController.add_distribution( option[:name], option[:dist], pkgsvr_url, pkgsvr_addr, pkgsvr_port )
+ BuildServerController.add_distribution( option[:name], option[:dist], pkgsvr_url, pkgsvr_addr, pkgsvr_port, option[:passwd] )
when "remove-dist"
BuildServerController.remove_distribution( option[:name], option[:dist] )
ret = ret.strip
ret[-3..-1] = ""
puts ret
+when "register" then
+ client = Client.new( nil, nil, nil )
+ client.register(option[:address], option[:dist], option[:pkg], option[:passwd])
else
raise RuntimeError, "Input is incorrect : #{option[:cmd]}"
end
@pkgsvr_url = @server.distmgr.get_distribution(project.dist_name).pkgsvr_url
@pkgsvr_ip = @server.distmgr.get_distribution(project.dist_name).pkgsvr_ip
@pkgsvr_port = @server.distmgr.get_distribution(project.dist_name).pkgsvr_port
+ @pkgsvr_password = @server.distmgr.get_distribution(project.dist_name).pkgsvr_password
else
@pkgsvr_url = ""
@pkgsvr_ip = ""
@pkgsvr_port = ""
+ @pkgsvr_password = ""
end
# this item will be initialized on pre-verify
# upload
u_client = Client.new( @pkgsvr_url, nil, @log )
- snapshot = u_client.upload( @pkgsvr_ip, @pkgsvr_port, binpkg_path_list, @server.ftp_addr, @server.ftp_port, @server.ftp_username, @server.ftp_passwd)
+ snapshot = u_client.upload( @pkgsvr_ip, @pkgsvr_port, binpkg_path_list, @server.ftp_addr, @server.ftp_port, @server.ftp_username, @server.ftp_passwd, @pkgsvr_password)
if snapshot.nil? then
@log.info( "Upload failed...", Log::LV_USER)
def load_migrate_list
if @db_dsn =~ /^Mysql/i then
- @db_migrate[2]=["ALTER TABLE jobs CHANGE COLUMN id id INTEGER AUTO_INCREMENT NOT NULL"]
+ @db_migrate[1]=["ALTER TABLE jobs CHANGE COLUMN id id INTEGER AUTO_INCREMENT NOT NULL",
+ "ALTER TABLE distributions ADD pkgsvr_password VARCHAR(64)"]
+ else
+ @db_migrate[1]=["ALTER TABLE distributions ADD pkgsvr_password VARCHAR(64)"]
end
end
# add distribution
- def self.add_distribution( id, dist_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port )
+ def self.add_distribution( id, dist_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password )
# get server
server = get_server(id)
migrate_db(server)
# add
- if server.distmgr.add_distribution( dist_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port ) then
+ if server.distmgr.add_distribution( dist_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password ) then
puts "Distribution is added successfully!"
return true
else
REMOVE_SVR= "build-svr remove-svr -n <server name> -d <friend server address>"
ADD_OS= "build-svr add-os -n <server name> -o <os>"
REMOVE_OS="build-svr remove-os -n <server name> -o <os>"
- ADD_DIST= "build-svr add-dist -n <server name> -D <distribution name> -u <package server url> -d <package server address>"
+ ADD_DIST= "build-svr add-dist -n <server name> -D <distribution name> -u <package server url> -d <package server address> -w <password>"
REMOVE_DIST="build-svr remove-dist -n <server name> -D <distribution name>"
LOCK_DIST="build-svr lock-dist -n <server name> -D <distribution name>"
UNLOCK_DIST="build-svr unlock-dist -n <server name> -D <distribution name>"
if options[:name].nil? or options[:name].empty? or
options[:dist].nil? or options[:dist].empty? or
options[:url].nil? or options[:url].empty? or
+ options[:passwd].nil? or options[:passwd].empty? or
options[:domain].nil? or options[:domain].empty? then
raise ArgumentError, "Usage: " + BuildServerUsage::ADD_DIST
end
require "packageServer.rb"
class PackageDistribution
- attr_accessor :name, :pkgsvr_url, :pkgsvr_ip, :pkgsvr_port, :status, :description, :id
+ attr_accessor :name, :pkgsvr_url, :pkgsvr_ip, :pkgsvr_port, :pkgsvr_password, :status, :description, :id
- def initialize( name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, status )
+ def initialize( name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password, status )
@id = -1
@name = name
@pkgsvr_url = pkgsvr_url
@pkgsvr_ip = pkgsvr_ip
@pkgsvr_port = pkgsvr_port
+ @pkgsvr_password = pkgsvr_password
@status = status
@description = ""
end
name VARCHAR(32) NOT NULL UNIQUE,
pkgsvr_url VARCHAR(256),
pkgsvr_addr VARCHAR(64),
+ pkgsvr_password VARCHAR(64),
status VARCHAR(32) NOT NULL DEFAULT 'OPEN',
description VARCHAR(256) ) #{post_fix}"
end
def self.load_row(row)
pkgsvr_ip = row['pkgsvr_addr'].split(":")[0]
pkgsvr_port = row['pkgsvr_addr'].split(":")[1].to_i
- new_obj = new(row['name'], row['pkgsvr_url'], pkgsvr_ip, pkgsvr_port, row['status'])
+ new_obj = new(row['name'], row['pkgsvr_url'], pkgsvr_ip, pkgsvr_port, row['pkgsvr_password'], row['status'])
new_obj.description = row['description']
new_obj.id = row['id']
dist_addr = @pkgsvr_ip + ":" + @pkgsvr_port.to_s
row = db.select_one("SELECT * FROM distributions WHERE name='#{@name}'")
if row.nil? then
- db.do "INSERT INTO distributions(name, pkgsvr_url, pkgsvr_addr, status, description) VALUES ('#{@name}','#{@pkgsvr_url}','#{dist_addr}','#{@status}','#{@description}')"
+ db.do "INSERT INTO distributions(name, pkgsvr_url, pkgsvr_addr, pkgsvr_password, status, description) VALUES ('#{@name}','#{@pkgsvr_url}','#{dist_addr}','#{@pkgsvr_password}','#{@status}','#{@description}')"
else
- db.do "UPDATE distributions SET pkgsvr_url='#{@pkgsvr_url}', pkgsvr_addr='#{dist_addr}', status='#{@status}', description='#{@description}' WHERE name='#{@name}'"
+ db.do "UPDATE distributions SET pkgsvr_url='#{@pkgsvr_url}', pkgsvr_addr='#{dist_addr}', pkgsvr_password='#{@pkgsvr_password}', status='#{@status}', description='#{@description}' WHERE name='#{@name}'"
end
end
# add
- def add_distribution(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port)
+ def add_distribution(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password)
@server.get_db_connection() do |db|
if not get_distribution_internal(name, db).nil? then
@server.log.info "The distribution \"#{name}\" already exists on server"
@server.log.error "Adding distribution failed!"
return false
end
- new_dist = PackageDistribution.new(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, "OPEN")
+ new_dist = PackageDistribution.new(name, pkgsvr_url, pkgsvr_ip, pkgsvr_port, pkgsvr_password, "OPEN")
new_dist.save(db)
end
@server.log.info "Added a new distribution \"#{name}\""
@pkgsvr_url = nil
@pkgsvr_ip = nil
@pkgsvr_port = nil
+ @pkgsvr_password = nil
end
@pkgsvr_url = @server.distmgr.get_distribution(first_project.dist_name).pkgsvr_url
@pkgsvr_ip = @server.distmgr.get_distribution(first_project.dist_name).pkgsvr_ip
@pkgsvr_port = @server.distmgr.get_distribution(first_project.dist_name).pkgsvr_port
+ @pkgsvr_password = @server.distmgr.get_distribution(first_project.dist_name).pkgsvr_password
@pkgsvr_client = Client.new(@pkgsvr_url, @job_working_dir, @log)
return true
# upload
u_client = Client.new( @pkgsvr_url, nil, @log )
- snapshot = u_client.upload( @pkgsvr_ip, @pkgsvr_port, binpkg_path_list, @server.ftp_addr, @server.ftp_port, @server.ftp_username, @server.ftp_passwd)
+ snapshot = u_client.upload( @pkgsvr_ip, @pkgsvr_port, binpkg_path_list, @server.ftp_addr, @server.ftp_port, @server.ftp_username, @server.ftp_passwd, @pkgsvr_password)
if snapshot.nil? then
@log.info( "Upload failed...", Log::LV_USER)
@pkgsvr_url = @server.distmgr.get_distribution(project.dist_name).pkgsvr_url
@pkgsvr_ip = @server.distmgr.get_distribution(project.dist_name).pkgsvr_ip
@pkgsvr_port = @server.distmgr.get_distribution(project.dist_name).pkgsvr_port
+ @pkgsvr_password = @server.distmgr.get_distribution(project.dist_name).pkgsvr_password
else
@pkgsvr_url = @server.distmgr.get_distribution(dist_name).pkgsvr_url
@pkgsvr_ip = @server.distmgr.get_distribution(dist_name).pkgsvr_ip
@pkgsvr_port = @server.distmgr.get_distribution(dist_name).pkgsvr_port
+ @pkgsvr_password = @server.distmgr.get_distribution(dist_name).pkgsvr_password
end
@local_path=local_path
# upload
u_client = Client.new( @pkgsvr_url, nil, @log )
- snapshot = u_client.upload( @pkgsvr_ip, @pkgsvr_port, binpkg_path_list, @server.ftp_addr, @server.ftp_port, @server.ftp_username, @server.ftp_passwd)
+ snapshot = u_client.upload( @pkgsvr_ip, @pkgsvr_port, binpkg_path_list, @server.ftp_addr, @server.ftp_port, @server.ftp_username, @server.ftp_passwd, @pkgsvr_password)
if snapshot.nil? then
@log.info( "Upload failed...", Log::LV_USER)
BuildCommServer.send_begin(req)
tok = line.split("|").map { |x| x.strip }
- if tok.count < 3 then
+ if tok.count < 4 then
@log.error "Received Wrong REQ : #{line}"
BuildCommServer.send(req, "ERROR|Invalid REQ format")
return
end
dist_name = tok[1].strip
+ password = tok[2].strip
- if tok[2].start_with? "DOCK" then
- dock_name = tok[3]
- idx = 4
+ if tok[3].start_with? "DOCK" then
+ dock_name = tok[4]
+ idx = 5
else
dock_name = ""
- idx = 2
+ idx = 3
end
file_path_list = []
end
idx = idx + 1
end
+ # password check
+ if @parent_server.passwd.eql? password then
+ @log.info "Register command password check pass"
+ else
+ @log.error "Received register command, but passwd mismatched : [#{password}]"
+ BuildCommServer.send(req,"ERROR|Password mismatched!")
+ BuildCommServer.send_end(req)
+ BuildCommServer.disconnect(req)
+ return
+ end
+
+ BuildCommServer.send(req, "WAITFORUPLOAD")
+ req_line = req.gets
+ if req_line.nil? or not req_line.strip.eql?("REGISTERCONTINUE") then
+ BuildCommServer.send(req,"ERROR|Invalid message received : [#{req_line}]")
+ BuildCommServer.send_end(req)
+ BuildCommServer.disconnect(req)
+ return
+ else
+ @log.info "register file is received successfully"
+ end
+
# register mutex
$register_mutex.synchronize do
begin
@log.info "Package server stop flag set"
BuildCommServer.send(req,"SUCC")
else
- @log.info "Received stop command, but passwd mismatched : #{passwd}"
+ @log.error "Received stop command, but passwd mismatched : #{passwd}"
BuildCommServer.send(req,"ERROR|Password mismatched!")
end
BuildCommServer.send_end(req)
return file_local_path
end
+ private
+ def upload_request(ip, port, dock, transporter, binary_path_list)
+ binary_path_list.each do |bpath|
+ client2 = BuildCommClient.create(ip, port, @log)
+ begin
+ if client2.nil? then
+ raise RuntimeError, "Failed to create BuildCommClient instance.."
+ end
+
+ @log.info "Send ready REQ.. [UPLOAD]"
+ result = client2.send("UPLOAD|#{dock}")
+ if not result then
+ raise RuntimeError, "Failed to send ready REQ.."
+ end
+ result = client2.send_file(bpath, transporter)
+ ensure
+ client2.terminate
+ end
+ end
+ end
+
public
# upload package
- def upload(ip, port, binary_path_list, ftp_addr=nil, ftp_port=nil, ftp_username=nil, ftp_passwd=nil)
+ def upload(ip, port, binary_path_list, ftp_addr=nil, ftp_port=nil, ftp_username=nil, ftp_passwd=nil, password="")
# check ip and port
if ip.nil? or port.nil? then
return nil
end
- # create unique dock number
- dock = Utils.create_uniq_name()
-
- # upload file
- binary_list = []
- binary_path_list.each do |bpath|
- filename = File.basename(bpath)
- client = BuildCommClient.create(ip, port, @log)
-
- if client.nil? then
- @log.error "Failed to create BuildCommClient instance.."
- return nil
- end
-
- @log.info "Send ready REQ.. [UPLOAD]"
- result = client.send("UPLOAD|#{dock}")
- if not result then
- @log.error "Failed to send ready REQ.."
- return nil
- end
-
- begin
- if not ftp_addr.nil? then
- transporter=FileTransferFTP.new(@log, ftp_addr, ftp_port, ftp_username, ftp_passwd)
- else
- transporter=FileTransferDirect.new(@log)
- end
-
- result = client.send_file(bpath, transporter)
- rescue => e
- @log.error "FTP failed to put file (exception)"
- @log.error "#{e.message}"
- @log.error e.backtrace.inspect
- return nil
+ begin
+ if not ftp_addr.nil? then
+ transporter=FileTransferFTP.new(@log, ftp_addr, ftp_port, ftp_username, ftp_passwd)
+ else
+ transporter=FileTransferDirect.new(@log)
end
-
- if not result then
- @log.error "FTP failed to put file (result is false)"
+ rescue => e
+ @log.error "FTP failed to put file (exception)"
+ @log.error "#{e.message}"
+ @log.error e.backtrace.inspect
+ return nil
+ end
+
+ binary_list = []
+ binary_path_list.each do |binary_path|
+ if File.exist? binary_path then
+ binary_list.push(File.basename(binary_path))
+ else
+ @log.error "Binary file does not exist"
return nil
end
+ end
- client.terminate
- binary_list.push(filename)
+ client = BuildCommClient.create(ip, port, @log)
+ if client.nil? then
+ puts "Can't access server #{ip}:#{port}"
+ return nil
end
- # register file
- if not binary_list.empty? then
- client = BuildCommClient.create(ip, port, @log)
+ begin
+ # create unique dock number
+ dock = Utils.create_uniq_name()
+
dist = get_distribution
if dist.empty? then
@log.error "Distribution is empty.."
return nil
end
- @log.info "Send register message.. [REGISTER|#{dist}|DOCK|#{dock}|#{binary_list.join("|")}]"
+ @log.info "Send register message.. [REGISTER|#{dist}|#{password}|DOCK|#{dock}|#{binary_list.join("|")}]"
snapshot = nil
- if client.send "REGISTER|#{dist}|DOCK|#{dock}|#{binary_list.join("|")}" then
- result = client.read_lines do |l|
- line = l.split("|")
- if line[0].strip == "ERROR" then
- @log.error l.strip
- break
- elsif line[0].strip == "SUCC" then
- snapshot = line[1].strip
- end
- end
- if not result or snapshot.nil? then
- @log.error "Failed to register! #{client.get_error_msg()}"
+ client.send "REGISTER|#{dist}|#{password}|DOCK|#{dock}|#{binary_list.join("|")}"
+
+ client.read_lines do |line|
+ if line.eql?("WAITFORUPLOAD") then
+ # upload
+ thread = Thread.new do
+ begin
+ upload_request(ip, port, dock, transporter, binary_path_list)
+ rescue => e
+ puts "Transfering file failed!"
+ puts e.message
+ end
+ end
+
+ thread.join
+ client.send("REGISTERCONTINUE")
+ elsif line.start_with? "SUCC" then
+ snapshot = line.split("|")[1]
+ elsif line.start_with? "ERROR" then
+ @log.error line.strip
return nil
+ else
+ @log.error "Unknown message received : #{l}"
end
end
-
+ ensure
client.terminate
+ end
+
+ if not snapshot.nil? and not snapshot.empty? then
snapshot = @server_addr + "/snapshots/" + snapshot
@log.info "Registered successfully! [#{binary_path_list.join("|")}]"
if snapshot.empty? then
@log.error "Failed to generate snapshot"
end
+
+ return snapshot
+ else
+ return nil
end
-
- return snapshot
end
private
if attr[0].strip.upcase.eql? "META" then return true
else return false end
end
+
+ public
+ def register(address, distribution, pkg_file_path, password)
+ # check file exist
+ if not File.exist? pkg_file_path then
+ puts "The file does not exist!.. #{pkg_file_path}"
+ return false
+ end
+
+ result = Utils.parse_server_addr(address)
+ if result.nil? then
+ puts "Server address is incorrect. (#{address})"
+ puts "Tune as following format."
+ puts " <ip>:<port>"
+ exit 1
+ end
+ bs_ip = result[0]
+ bs_port = result[1]
+
+ pkg_file_path_list = []
+ pkg_file_path_list.push(pkg_file_path)
+ # set distribution
+ @server_addr = distribution
+ ret = upload(bs_ip, bs_port, pkg_file_path_list, nil, nil, nil, nil, password)
+
+ if ret then @log.info "Snapshot is generated : #{ret}" end
+ end
end
raise ArgumentError, "Usage: pkg-cli install-dep -P <package name> [-o <os>]"
end
+ when "register"
+ if options[:pkg].nil? or options[:pkg].empty? or options[:address].nil? or options[:address].empty? or
+ options[:dist].nil? or options[:dist].empty? then
+ raise ArgumentError, "Usage: pkg-svr register -P <package file path> -d <server address> --dist <distribution name> -w <password>"
+ end
+
else
raise ArgumentError, "Input is incorrect : #{options[:cmd]}"
end
+ "\t" + "pkg-cli list-lpkg [-l <location>]" + "\n" \
+ "\t" + "pkg-cli build-dep -P <package name> [-o <os>]" + "\n" \
+ "\t" + "pkg-cli install-dep -P <package name> [-o <os>]" + "\n" \
+ + "\t" + "pkg-cli register -P <package file path> -a <server address> -d <distribution name> -w <password>" + "\n" \
+ "\n" + "Options:" + "\n"
optparse = OptionParser.new(nil, 32, ' '*8) do|opts|
options[:os] = os
end
+ opts.on( '-d', '--dist <distribution name>', 'distribution name' ) do |dist|
+ options[:dist] = dist
+ end
+
opts.on( '-u', '--url <server url>', 'package server url: http://127.0.0.1/dibs/unstable' ) do |url|
options[:url] = url
end
options[:loc] = loc
end
+ opts.on( '-w', '--passwd <password>', 'password' ) do |passwd|
+ options[:passwd] = passwd
+ end
+
+ opts.on( '-a', '--address <server address>', 'package server address : 127.0.0.1:2224' ) do |address|
+ options[:address] = address
+ end
+
opts.on( '--trace', 'enable trace dependent packages' ) do
options[:t] = true
end
puts "DIBS(Distributed Intelligent Build System) version " + Utils.get_version()
exit
end
+
end
cmd = ARGV[0]
cmd.eql? "install-file" or cmd.eql? "clean" or
cmd.eql? "upgrade" or cmd.eql? "check-upgrade" or
cmd.eql? "build-dep" or cmd.eql? "install-dep" or
+ cmd.eql? "register" or
cmd =~ /(-v)|(--version)/ or
cmd =~ /(help)|(-h)|(--help)/ then
${RUBY} ../../../build-svr migrate -n testserver3 --dsn Mysql:testserver3:localhost --dbuser root --dbpassword $DB_PASSWD
rm -f a
cd ..
-${RUBY} ../../build-svr add-dist -n testserver3 -D BASE -u `pwd`/pkgsvr01/unstable -d 127.0.0.1:3333
+${RUBY} ../../build-svr add-dist -n testserver3 -D BASE -u `pwd`/pkgsvr01/unstable -d 127.0.0.1:3333 -w score
${RUBY} ../../build-svr add-svr -n testserver3 -d 127.0.0.1:2224
${RUBY} ../../build-svr add-os -n testserver3 -o ubuntu-32
${RUBY} ../../build-svr add-os -n testserver3 -o windows-32
${RUBY} ../../pkg-svr create -n pkgsvr01 -d unstable
${RUBY} ../../pkg-svr add-os -n pkgsvr01 -d unstable -o ubuntu-32
${RUBY} ../../pkg-svr add-os -n pkgsvr01 -d unstable -o windows-32
-${RUBY} ../../pkg-svr start -n pkgsvr01 -p 3333
+${RUBY} ../../pkg-svr start -n pkgsvr01 -p 3333 -w score