diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-18 16:16:36 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-18 16:16:36 +0300 |
commit | 311b0269b4eb9839fa63f80c8d7a58f32b8138a0 (patch) | |
tree | 07e7870bca8aed6d61fdcc810731c50d2c40af47 /lib/system_check | |
parent | 27909cef6c4170ed9205afa7426b8d3de47cbb0c (diff) |
Add latest changes from gitlab-org/gitlab@14-5-stable-eev14.5.0-rc42
Diffstat (limited to 'lib/system_check')
-rw-r--r-- | lib/system_check/app/init_script_exists_check.rb | 29 | ||||
-rw-r--r-- | lib/system_check/app/init_script_up_to_date_check.rb | 47 | ||||
-rw-r--r-- | lib/system_check/app/systemd_unit_files_or_init_script_exist_check.rb | 39 | ||||
-rw-r--r-- | lib/system_check/app/systemd_unit_files_or_init_script_up_to_date_check.rb | 80 | ||||
-rw-r--r-- | lib/system_check/incoming_email/mail_room_enabled_check.rb (renamed from lib/system_check/incoming_email/initd_configured_check.rb) | 16 | ||||
-rw-r--r-- | lib/system_check/incoming_email/mail_room_running_check.rb | 14 | ||||
-rw-r--r-- | lib/system_check/incoming_email_check.rb | 2 | ||||
-rw-r--r-- | lib/system_check/init_helpers.rb | 24 | ||||
-rw-r--r-- | lib/system_check/rake_task/app_task.rb | 4 | ||||
-rw-r--r-- | lib/system_check/sidekiq_check.rb | 6 |
10 files changed, 175 insertions, 86 deletions
diff --git a/lib/system_check/app/init_script_exists_check.rb b/lib/system_check/app/init_script_exists_check.rb deleted file mode 100644 index 7be92acdc37..00000000000 --- a/lib/system_check/app/init_script_exists_check.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -module SystemCheck - module App - class InitScriptExistsCheck < SystemCheck::BaseCheck - set_name 'Init script exists?' - set_skip_reason 'skipped (omnibus-gitlab has no init script)' - - def skip? - omnibus_gitlab? - end - - def check? - script_path = '/etc/init.d/gitlab' - File.exist?(script_path) - end - - def show_error - try_fixing_it( - 'Install the init script' - ) - for_more_information( - see_installation_guide_section('Install Init Script') - ) - fix_and_rerun - end - end - end -end diff --git a/lib/system_check/app/init_script_up_to_date_check.rb b/lib/system_check/app/init_script_up_to_date_check.rb deleted file mode 100644 index cf841d5e659..00000000000 --- a/lib/system_check/app/init_script_up_to_date_check.rb +++ /dev/null @@ -1,47 +0,0 @@ -# frozen_string_literal: true - -module SystemCheck - module App - class InitScriptUpToDateCheck < SystemCheck::BaseCheck - SCRIPT_PATH = '/etc/init.d/gitlab' - - set_name 'Init script up-to-date?' - set_skip_reason 'skipped (omnibus-gitlab has no init script)' - - def skip? - return true if omnibus_gitlab? - - unless init_file_exists? - self.skip_reason = "can't check because of previous errors" - - true - end - end - - def check? - recipe_path = Rails.root.join('lib/support/init.d/', 'gitlab') - - recipe_content = File.read(recipe_path) - script_content = File.read(SCRIPT_PATH) - - recipe_content == script_content - end - - def show_error - try_fixing_it( - 'Re-download the init script' - ) - for_more_information( - see_installation_guide_section('Install Init Script') - ) - fix_and_rerun - end - - private - - def init_file_exists? - File.exist?(SCRIPT_PATH) - end - end - end -end diff --git a/lib/system_check/app/systemd_unit_files_or_init_script_exist_check.rb b/lib/system_check/app/systemd_unit_files_or_init_script_exist_check.rb new file mode 100644 index 00000000000..b2f059d212b --- /dev/null +++ b/lib/system_check/app/systemd_unit_files_or_init_script_exist_check.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +module SystemCheck + module App + class SystemdUnitFilesOrInitScriptExistCheck < SystemCheck::BaseCheck + set_name 'Systemd unit files or init script exist?' + set_skip_reason 'skipped (omnibus-gitlab has neither init script nor systemd units)' + + def skip? + omnibus_gitlab? + end + + def check? + unit_paths = [ + '/usr/local/lib/systemd/system/gitlab-gitaly.service', + '/usr/local/lib/systemd/system/gitlab-mailroom.service', + '/usr/local/lib/systemd/system/gitlab-puma.service', + '/usr/local/lib/systemd/system/gitlab-sidekiq.service', + '/usr/local/lib/systemd/system/gitlab.slice', + '/usr/local/lib/systemd/system/gitlab.target', + '/usr/local/lib/systemd/system/gitlab-workhorse.service' + ] + script_path = '/etc/init.d/gitlab' + + unit_paths.all? { |s| File.exist?(s) } || File.exist?(script_path) + end + + def show_error + try_fixing_it( + 'Install the Service' + ) + for_more_information( + see_installation_guide_section('Install the Service') + ) + fix_and_rerun + end + end + end +end diff --git a/lib/system_check/app/systemd_unit_files_or_init_script_up_to_date_check.rb b/lib/system_check/app/systemd_unit_files_or_init_script_up_to_date_check.rb new file mode 100644 index 00000000000..10bc772a83c --- /dev/null +++ b/lib/system_check/app/systemd_unit_files_or_init_script_up_to_date_check.rb @@ -0,0 +1,80 @@ +# frozen_string_literal: true + +module SystemCheck + module App + class SystemdUnitFilesOrInitScriptUpToDateCheck < SystemCheck::BaseCheck + SCRIPT_PATH = '/etc/init.d/gitlab' + UNIT_PATHS = [ + '/usr/local/lib/systemd/system/gitlab-gitaly.service', + '/usr/local/lib/systemd/system/gitlab-mailroom.service', + '/usr/local/lib/systemd/system/gitlab-puma.service', + '/usr/local/lib/systemd/system/gitlab-sidekiq.service', + '/usr/local/lib/systemd/system/gitlab.slice', + '/usr/local/lib/systemd/system/gitlab.target', + '/usr/local/lib/systemd/system/gitlab-workhorse.service' + ].freeze + + set_name 'Systemd unit files or init script up-to-date?' + set_skip_reason 'skipped (omnibus-gitlab has neither init script nor systemd units)' + + def skip? + return true if omnibus_gitlab? + + unless unit_files_exist? || init_file_exists? + self.skip_reason = "can't check because of previous errors" + + true + end + end + + def check? + if unit_files_exist? + return unit_files_up_to_date? + end + + init_file_up_to_date? + end + + def show_error + try_fixing_it( + 'Install the Service' + ) + for_more_information( + see_installation_guide_section('Install the Service') + ) + fix_and_rerun + end + + private + + def init_file_exists? + File.exist?(SCRIPT_PATH) + end + + def unit_files_exist? + UNIT_PATHS.all? { |s| File.exist?(s) } + end + + def init_file_up_to_date? + recipe_path = Rails.root.join('lib/support/init.d/', 'gitlab') + + recipe_content = File.read(recipe_path) + script_content = File.read(SCRIPT_PATH) + + recipe_content == script_content + end + + def unit_files_up_to_date? + UNIT_PATHS.all? do |unit| + unit_name = File.basename(unit) + recipe_path = Rails.root.join('lib/support/systemd/', unit_name) + + recipe_content = File.read(recipe_path) + unit_content = File.read(unit) + + recipe_content == unit_content + end + end + end + end +end diff --git a/lib/system_check/incoming_email/initd_configured_check.rb b/lib/system_check/incoming_email/mail_room_enabled_check.rb index acb4b5a9e74..8e725aabd03 100644 --- a/lib/system_check/incoming_email/initd_configured_check.rb +++ b/lib/system_check/incoming_email/mail_room_enabled_check.rb @@ -2,20 +2,21 @@ module SystemCheck module IncomingEmail - class InitdConfiguredCheck < SystemCheck::BaseCheck - set_name 'Init.d configured correctly?' + class MailRoomEnabledCheck < SystemCheck::BaseCheck + include ::SystemCheck::InitHelpers + set_name 'Mailroom enabled?' def skip? omnibus_gitlab? end def check? - mail_room_configured? + mail_room_enabled? || mail_room_configured? end def show_error try_fixing_it( - 'Enable mail_room in the init.d configuration.' + 'Enable mail_room' ) for_more_information( 'doc/administration/reply_by_email.md' @@ -25,6 +26,13 @@ module SystemCheck private + def mail_room_enabled? + target = '/usr/local/lib/systemd/system/gitlab.target' + service = '/usr/local/lib/systemd/system/gitlab-mailroom.service' + + File.exist?(target) && File.exist?(service) && systemd_get_wants('gitlab.target').include?("gitlab-mailroom.service") + end + def mail_room_configured? path = '/etc/default/gitlab' File.exist?(path) && File.read(path).include?('mail_room_enabled=true') diff --git a/lib/system_check/incoming_email/mail_room_running_check.rb b/lib/system_check/incoming_email/mail_room_running_check.rb index b7aead4624e..38bb1e46364 100644 --- a/lib/system_check/incoming_email/mail_room_running_check.rb +++ b/lib/system_check/incoming_email/mail_room_running_check.rb @@ -3,12 +3,13 @@ module SystemCheck module IncomingEmail class MailRoomRunningCheck < SystemCheck::BaseCheck + include ::SystemCheck::InitHelpers set_name 'MailRoom running?' def skip? return true if omnibus_gitlab? - unless mail_room_configured? + unless mail_room_enabled? || mail_room_configured? self.skip_reason = "can't check because of previous errors" true end @@ -20,10 +21,10 @@ module SystemCheck def show_error try_fixing_it( - sudo_gitlab('RAILS_ENV=production bin/mail_room start') + 'Start mail_room' ) for_more_information( - see_installation_guide_section('Install Init Script'), + 'doc/administration/incoming_email.md', 'see log/mail_room.log for possible errors' ) fix_and_rerun @@ -31,6 +32,13 @@ module SystemCheck private + def mail_room_enabled? + target = '/usr/local/lib/systemd/system/gitlab.target' + service = '/usr/local/lib/systemd/system/gitlab-mailroom.service' + + File.exist?(target) && File.exist?(service) && systemd_get_wants('gitlab.target').include?("gitlab-mailroom.service") + end + def mail_room_configured? path = '/etc/default/gitlab' File.exist?(path) && File.read(path).include?('mail_room_enabled=true') diff --git a/lib/system_check/incoming_email_check.rb b/lib/system_check/incoming_email_check.rb index 84033ada710..3cae9450b94 100644 --- a/lib/system_check/incoming_email_check.rb +++ b/lib/system_check/incoming_email_check.rb @@ -14,7 +14,7 @@ module SystemCheck end if Rails.env.production? - checks << SystemCheck::IncomingEmail::InitdConfiguredCheck + checks << SystemCheck::IncomingEmail::MailRoomEnabledCheck checks << SystemCheck::IncomingEmail::MailRoomRunningCheck end diff --git a/lib/system_check/init_helpers.rb b/lib/system_check/init_helpers.rb new file mode 100644 index 00000000000..2573f06b716 --- /dev/null +++ b/lib/system_check/init_helpers.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require 'open3' + +module SystemCheck + module InitHelpers + # Return the Wants= of a unit, empty if the unit doesn't exist + def systemd_get_wants(unitname) + stdout, _stderr, status = Open3.capture3("systemctl", "--no-pager", "show", unitname) + + unless status + return [] + end + + wantsline = stdout.lines.find { |line| line.start_with?("Wants=") } + + unless wantsline + return [] + end + + wantsline.delete_prefix("Wants=").strip.split + end + end +end diff --git a/lib/system_check/rake_task/app_task.rb b/lib/system_check/rake_task/app_task.rb index f7d2bf86c78..892417d67ec 100644 --- a/lib/system_check/rake_task/app_task.rb +++ b/lib/system_check/rake_task/app_task.rb @@ -23,8 +23,8 @@ module SystemCheck SystemCheck::App::UploadsDirectoryExistsCheck, SystemCheck::App::UploadsPathPermissionCheck, SystemCheck::App::UploadsPathTmpPermissionCheck, - SystemCheck::App::InitScriptExistsCheck, - SystemCheck::App::InitScriptUpToDateCheck, + SystemCheck::App::SystemdUnitFilesOrInitScriptExistCheck, + SystemCheck::App::SystemdUnitFilesOrInitScriptUpToDateCheck, SystemCheck::App::ProjectsHaveNamespaceCheck, SystemCheck::App::RedisVersionCheck, SystemCheck::App::RubyVersionCheck, diff --git a/lib/system_check/sidekiq_check.rb b/lib/system_check/sidekiq_check.rb index 7ac1bd58ede..ab048433b37 100644 --- a/lib/system_check/sidekiq_check.rb +++ b/lib/system_check/sidekiq_check.rb @@ -39,6 +39,12 @@ module SystemCheck if (cluster_count == 1 && worker_count > 0) || (cluster_count == 0 && worker_count == 1) $stdout.puts "#{cluster_count}/#{worker_count}".color(:green) + elsif File.symlink?('/run/systemd/units/invocation:gitlab-sidekiq.service') + $stdout.puts "#{cluster_count}/#{worker_count}".color(:red) + try_fixing_it( + 'sudo systemctl restart gitlab-sidekiq.service' + ) + fix_and_rerun else $stdout.puts "#{cluster_count}/#{worker_count}".color(:red) try_fixing_it( |