Bug #9713


Restore WIN32 service functionality

Added by Martin Matuška over 9 years ago. Updated almost 6 years ago.

Target version:
Fixed in Releases:
Found in Releases:


Since smart-proxy 1.5, the WIN32 service functionality is broken. To restore it a must be created or the bundler vs bundler_ext used differently. In addition, the service code removed in commit 038fa6cf7079880b16d998346d05112acefec81e needs to be reintroduced.

Related issues 1 (0 open1 closed)

Related to Smart Proxy - Bug #8793: Smart-proxy does not run as a service on WindowsDuplicate12/26/2014Actions
Actions #1

Updated by Dominic Cleal over 9 years ago

  • Project changed from Foreman to Smart Proxy
  • Category changed from Smart Proxy to Core
Actions #2

Updated by The Foreman Bot about 9 years ago

  • Status changed from New to Ready For Testing
  • Pull request added
  • Pull request deleted ()
Actions #3

Updated by Zak Herner about 9 years ago

  • Related to Bug #8793: Smart-proxy does not run as a service on Windows added
Actions #4

Updated by Benjamin Papillon about 9 years ago

To not add too much non dev comments on the pr, here are my findings regarding the tests of this patch.

First, as mchesler found, Ruby 1.9 now uses RUBY_PLATFORM to detect the platform ruby is on. Here is the output frop irb :

irb(main):001:0> puts RUBY_PLATFORM
=> nil
irb(main):002:0> puts RUBY_VERSION
=> nil

After disabling the checks in register-service.rb, I also commented the following line of register-service.rb because your script is not accepting any argument:

  cmd += ' --service'

Last, I had to install 2 gems : "highline" and "win32-service" gems because the registration script depends on them and the gems are not bundled.

The service registration worked fine after that.

Once the service is registered, I tried to start the service. First, I tried to start the service in command line (to check any ruby issues) then from the windows services.

As per registration script, I bypassed the check on PLATFORM to check further.
I had a strange effect with requiring libraries. Here is the irb output of require lines:

<path("../../lib", __FILE__), File.expand_path("../../modules", __FILE__)])
=> ["C:/AA/foreman/smart/lib", "C:/AA/foreman/smart/modules", "C:/Ruby193/lib/ru
by/site_ruby/1.9.1", "C:/Ruby193/lib/ruby/site_ruby/1.9.1/i386-msvcrt", "C:/Ruby
193/lib/ruby/site_ruby", "C:/Ruby193/lib/ruby/vendor_ruby/1.9.1", "C:/Ruby193/li
b/ruby/vendor_ruby/1.9.1/i386-msvcrt", "C:/Ruby193/lib/ruby/vendor_ruby", "C:/Ru
by193/lib/ruby/1.9.1", "C:/Ruby193/lib/ruby/1.9.1/i386-mingw32"]
irb(main):002:0> require 'smart_proxy'
=> true
irb(main):003:0> require 'win32/daemon'
LoadError: cannot load such file -- win32/daemon
        from (irb):3:in `require'
        from (irb):3
        from C:/Ruby193/bin/irb:12:in `<main>'
irb(main):004:0> exit


If I execute the line
$LOAD_PATH.unshift(*Dir[File.expand_path("../../lib", __FILE__), File.expand_path("../../modules", __FILE__)])
before require 'win32/daemon', the daemon library refuse to load. This is strange because code is correct. printing $LOAD_PATH before and after the line shows expected values.
The workaround I found was to require win32/daemon and include Win32 before LOAD_PATH dance (yes it is very hackish and I admit not understanding everything I'm doing :D)

Let's continue understanding the code :)

Line 12 and 13 I'm seeing a comment insisting to have a complete path for the logfile on windows and we have a relative path just below. Not sure it will work ;-)
Well, executing the scritp, fails. Correcting the logfile variable with the complete path, my line become :

  logfile = "C:\\aa\\foreman\\proxyservice.log" 

Yes I know, logfile is hardcoded for the moment, testing purposes :) The good way would have been reuse settings.yml option.
Be careful, you need double backslashes or it will not work.

Now every small bugs have been fixed, it is time to see how well our proxy is starting :

C:\AA\foreman\smart\bin>net start "smart proxy" 
The service is not responding to the control function.

More help is available by typing NET HELPMSG 2186.

No logs are created. I don't know what is happening at all :/

Actions #5

Updated by Anonymous about 9 years ago

  • Status changed from Ready For Testing to Closed
  • % Done changed from 0 to 100
Actions #6

Updated by Anonymous about 9 years ago

  • Status changed from Closed to Ready For Testing
Actions #7

Updated by Anonymous about 9 years ago

  • Status changed from Ready For Testing to Closed
Actions #8

Updated by Dominic Cleal about 9 years ago

  • Translation missing: en.field_release set to 35

Also available in: Atom PDF