Skip to content

Commit 61b55d5

Browse files
committed
msi: fix slow start issue on Windows
Until chef/win32-service#85 is merged, use forked version of win32-service. This fix should be applied to fluent-package not to block starting fluentdwinsvc service on Windows. See fluent#618 Closes: fluent#630 NOTE: even though just putting the following line does not install forked version of win32-service, so install it explicitly as same as fluentd gem. gem "win32-service", github: "fluent-plugins-nursery/win32-service", branch: "fluent-package", platforms: [:mingw, :x64_mingw] Signed-off-by: Kentaro Hayashi <hayashi@clear-code.com>
1 parent 1bd0d76 commit 61b55d5

File tree

3 files changed

+57
-7
lines changed

3 files changed

+57
-7
lines changed

fluent-package/Gemfile

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,21 @@ if ENV["INSTALL_GEM_FROM_LOCAL_REPO"]
3131
# into managed Gemfile.lock
3232
source FLUENTD_LOCAL_GEM_REPO do
3333
gem "fluentd"
34+
# Bundle forked version of win32-service until
35+
# https://github.com/chef/win32-service/pull/85 is merged.
36+
# This workaround should be applied to fluent-package not to block starting
37+
# fluentdwinsvc service on Windows. See
38+
# https://github.com/fluent/fluent-package-builder/issues/618
39+
# NOTE: platforms: does not work in source ... do block
40+
if RUBY_PLATFORM =~ /mswin|mingw/
41+
gem "win32-service"
42+
end
3443
end
3544
else
3645
# Lock to specific revision
3746
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3847
gem "fluentd", github: "fluent/fluentd", ref: FLUENTD_REVISION
48+
gem "win32-service", github: "fluent-plugins-nursery/win32-service", branch: "fluent-package", platforms: [:mingw, :x64_mingw]
3949
end
4050

4151
# plugin gems
@@ -81,7 +91,8 @@ gem "ffi-win32-extensions", "1.0.4", platforms: windows_platforms
8191
gem "nokogiri", "1.15.5", platforms: windows_platforms
8292
gem "win32-event", "0.6.3", platforms: windows_platforms
8393
gem "win32-ipc", "0.7.0", platforms: windows_platforms
84-
gem "win32-service", "2.3.2", platforms: windows_platforms
94+
# Use officially released version when PR was merged and released.
95+
#gem "win32-service", "2.3.2", platforms: windows_platforms
8596
gem "winevt_c", "0.10.1", platforms: windows_platforms
8697
gem "win32-eventlog", "0.6.7", platforms: windows_platforms
8798
gem "fluent-plugin-parser-winevt_xml", "0.2.6", platforms: windows_platforms

fluent-package/Gemfile.lock

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
GIT
2+
remote: https://github.com/fluent-plugins-nursery/win32-service
3+
revision: cfcc2007b3843127329d6a7307a62a927a714327
4+
branch: fluent-package
5+
specs:
6+
win32-service (2.3.2)
7+
ffi
8+
ffi-win32-extensions
9+
110
GIT
211
remote: https://github.com/fluent/fluentd
312
revision: d3cf2e0f95a0ad88b9897197db6c5152310f114f
@@ -257,9 +266,6 @@ GEM
257266
ffi
258267
win32-ipc (0.7.0)
259268
ffi
260-
win32-service (2.3.2)
261-
ffi
262-
ffi-win32-extensions
263269
winevt_c (0.10.1)
264270
yajl-ruby (1.4.3)
265271
zip-zip (0.3)
@@ -333,7 +339,7 @@ DEPENDENCIES
333339
win32-event (= 0.6.3)
334340
win32-eventlog (= 0.6.7)
335341
win32-ipc (= 0.7.0)
336-
win32-service (= 2.3.2)
342+
win32-service!
337343
winevt_c (= 0.10.1)
338344
yajl-ruby (= 1.4.3)
339345

fluent-package/Rakefile

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ class DownloadTask
177177
attr_reader :file_jemalloc_source
178178
attr_reader :file_ruby_source, :file_ruby_installer_x64
179179
attr_reader :file_fluentd_archive
180+
attr_reader :file_win32_service_archive
180181
attr_reader :files_ruby_gems
181182
attr_reader :file_openssl_source
182183

@@ -199,6 +200,7 @@ class DownloadTask
199200
define_jemalloc_file
200201
define_ruby_files
201202
define_fluentd_archive
203+
define_win32_service_archive if windows?
202204
define_gem_files
203205
define_openssl_file
204206

@@ -210,7 +212,10 @@ class DownloadTask
210212
task :ruby => [@file_ruby_source, @file_ruby_installer_x64]
211213

212214
desc "Clone fluentd repository and create a tarball"
213-
task :fluentd => @file_fluentd_archive
215+
task :fluentd => [@file_fluentd_archive]
216+
217+
desc "Clone win32-service repository and create a tarball"
218+
task :win32_service => [@file_win32_service_archive]
214219

215220
desc "Download ruby gems"
216221
task :ruby_gems => @files_ruby_gems
@@ -318,6 +323,21 @@ class DownloadTask
318323
end
319324
end
320325

326+
def define_win32_service_archive
327+
@file_win32_service_archive = File.join(DOWNLOADS_DIR, "win32-service.tar.gz")
328+
file @file_win32_service_archive do
329+
ensure_directory(DOWNLOADS_DIR) do
330+
dirname = "win32-service"
331+
rm_rf(dirname) if File.exist?(dirname)
332+
sh("git", "clone", "https://github.com/fluent-plugins-nursery/win32-service.git")
333+
cd("win32-service") do
334+
sh("git", "checkout", "fluent-package")
335+
end
336+
sh(*tar_command, "cvfz", "#{dirname}.tar.gz", dirname)
337+
end
338+
end
339+
end
340+
321341
def define_gem_files
322342
paths = []
323343
Dir.glob("#{DOWNLOADS_DIR}/*.gem") do |path|
@@ -407,7 +427,7 @@ class BuildTask
407427
end
408428

409429
desc "Install ruby gems"
410-
task :ruby_gems => [:"download:ruby_gems", :fluentd] do
430+
task :ruby_gems => windows? ? [:"download:ruby_gems", :fluentd, :win32_service] : [:"download:ruby_gems", :fluentd] do
411431
gem_install("bundler", BUNDLER_VERSION)
412432

413433
gem_home = ENV["GEM_HOME"]
@@ -439,6 +459,19 @@ class BuildTask
439459
end
440460
end
441461

462+
desc "Install win32-service"
463+
task :win32_service => [:"download:win32_service"] do
464+
cd(DOWNLOADS_DIR) do
465+
tar_options = ["--no-same-owner", "--force-local"]
466+
archive_path = @download_task.file_win32_service_archive
467+
sh(*tar_command, "xvf", archive_path, *tar_options) unless File.exist?("win32-service")
468+
cd("win32-service") do
469+
sh("rake", "build")
470+
setup_local_gem_repo
471+
end
472+
end
473+
end
474+
442475
desc "Install all gems"
443476
task :gems => [:ruby_gems]
444477

0 commit comments

Comments
 (0)