check.rake 19.7 KB
Newer Older
1
namespace :gitlab do
R
Riyad Preukschas 已提交
2 3
  desc "GITLAB | Check the configuration of GitLab and its environment"
  task check: %w{gitlab:env:check
4
                 gitlab:gitlab_shell:check
R
Riyad Preukschas 已提交
5
                 gitlab:sidekiq:check
R
Riyad Preukschas 已提交
6 7 8
                 gitlab:app:check}


R
Riyad Preukschas 已提交
9

10
  namespace :app do
R
Riyad Preukschas 已提交
11 12
    desc "GITLAB | Check the configuration of the GitLab Rails app"
    task check: :environment  do
R
Riyad Preukschas 已提交
13 14 15 16 17 18 19 20 21 22 23 24
      warn_user_is_not_gitlab
      start_checking "GitLab"

      check_database_config_exists
      check_database_is_not_sqlite
      check_migrations_are_up
      check_gitlab_config_exists
      check_gitlab_config_not_outdated
      check_log_writable
      check_tmp_writable
      check_init_script_exists
      check_init_script_up_to_date
H
Hiroyuki Sato 已提交
25
      check_projects_have_namespace
R
Riyad Preukschas 已提交
26
      check_satellites_exist
27
      check_redis_version
28
      check_git_version
R
Riyad Preukschas 已提交
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

      finished_checking "GitLab"
    end


    # Checks
    ########################

    def check_database_config_exists
      print "Database config exists? ... "

      database_config_file = Rails.root.join("config", "database.yml")

      if File.exists?(database_config_file)
        puts "yes".green
      else
        puts "no".red
        try_fixing_it(
          "Copy config/database.yml.<your db> to config/database.yml",
          "Check that the information in config/database.yml is correct"
        )
        for_more_information(
          see_database_guide,
          "http://guides.rubyonrails.org/getting_started.html#configuring-a-database"
        )
R
Riyad Preukschas 已提交
54
        fix_and_rerun
R
Riyad Preukschas 已提交
55 56 57 58
      end
    end

    def check_database_is_not_sqlite
R
Riyad Preukschas 已提交
59
      print "Database is SQLite ... "
R
Riyad Preukschas 已提交
60 61 62

      database_config_file = Rails.root.join("config", "database.yml")

63
      unless File.read(database_config_file) =~ /adapter:\s+sqlite/
R
Riyad Preukschas 已提交
64
        puts "no".green
R
Riyad Preukschas 已提交
65
      else
R
Riyad Preukschas 已提交
66
        puts "yes".red
R
Riyad Preukschas 已提交
67 68 69 70
        for_more_information(
          "https://github.com/gitlabhq/gitlabhq/wiki/Migrate-from-SQLite-to-MySQL",
          see_database_guide
        )
R
Riyad Preukschas 已提交
71
        fix_and_rerun
R
Riyad Preukschas 已提交
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
      end
    end

    def check_gitlab_config_exists
      print "GitLab config exists? ... "

      gitlab_config_file = Rails.root.join("config", "gitlab.yml")

      if File.exists?(gitlab_config_file)
        puts "yes".green
      else
        puts "no".red
        try_fixing_it(
          "Copy config/gitlab.yml.example to config/gitlab.yml",
          "Update config/gitlab.yml to match your setup"
        )
        for_more_information(
          see_installation_guide_section "GitLab"
        )
R
Riyad Preukschas 已提交
91
        fix_and_rerun
R
Riyad Preukschas 已提交
92 93 94 95
      end
    end

    def check_gitlab_config_not_outdated
R
Riyad Preukschas 已提交
96
      print "GitLab config outdated? ... "
R
Riyad Preukschas 已提交
97 98 99 100 101 102 103

      gitlab_config_file = Rails.root.join("config", "gitlab.yml")
      unless File.exists?(gitlab_config_file)
        puts "can't check because of previous errors".magenta
      end

      # omniauth or ldap could have been deleted from the file
104
      unless Gitlab.config['git_host']
R
Riyad Preukschas 已提交
105
        puts "no".green
R
Riyad Preukschas 已提交
106
      else
R
Riyad Preukschas 已提交
107
        puts "yes".red
R
Riyad Preukschas 已提交
108
        try_fixing_it(
R
Riyad Preukschas 已提交
109
          "Backup your config/gitlab.yml",
R
Riyad Preukschas 已提交
110 111 112 113 114 115
          "Copy config/gitlab.yml.example to config/gitlab.yml",
          "Update config/gitlab.yml to match your setup"
        )
        for_more_information(
          see_installation_guide_section "GitLab"
        )
R
Riyad Preukschas 已提交
116
        fix_and_rerun
R
Riyad Preukschas 已提交
117 118
      end
    end
119

R
Riyad Preukschas 已提交
120 121 122 123 124 125 126
    def check_init_script_exists
      print "Init script exists? ... "

      script_path = "/etc/init.d/gitlab"

      if File.exists?(script_path)
        puts "yes".green
N
Nihad Abbasov 已提交
127
      else
R
Riyad Preukschas 已提交
128 129 130 131 132 133 134
        puts "no".red
        try_fixing_it(
          "Install the init script"
        )
        for_more_information(
          see_installation_guide_section "Install Init Script"
        )
R
Riyad Preukschas 已提交
135
        fix_and_rerun
R
Riyad Preukschas 已提交
136 137 138 139 140 141
      end
    end

    def check_init_script_up_to_date
      print "Init script up-to-date? ... "

142
      recipe_path = Rails.root.join("lib/support/init.d/", "gitlab")
R
Riyad Preukschas 已提交
143
      script_path = "/etc/init.d/gitlab"
144

R
Riyad Preukschas 已提交
145 146
      unless File.exists?(script_path)
        puts "can't check because of previous errors".magenta
147 148 149
        return
      end

150
      recipe_content = File.read(recipe_path)
R
Riyad Preukschas 已提交
151 152 153 154 155 156 157 158 159 160 161 162
      script_content = File.read(script_path)

      if recipe_content == script_content
        puts "yes".green
      else
        puts "no".red
        try_fixing_it(
          "Redownload the init script"
        )
        for_more_information(
          see_installation_guide_section "Install Init Script"
        )
R
Riyad Preukschas 已提交
163
        fix_and_rerun
R
Riyad Preukschas 已提交
164 165 166 167 168 169 170 171 172 173
      end
    end

    def check_migrations_are_up
      print "All migrations up? ... "

      migration_status =  `bundle exec rake db:migrate:status`

      unless migration_status =~ /down\s+\d{14}/
        puts "yes".green
174
      else
R
Riyad Preukschas 已提交
175 176
        puts "no".red
        try_fixing_it(
177
          sudo_gitlab("bundle exec rake db:migrate RAILS_ENV=production")
R
Riyad Preukschas 已提交
178
        )
R
Riyad Preukschas 已提交
179
        fix_and_rerun
R
Riyad Preukschas 已提交
180 181 182 183 184 185 186 187
      end
    end

    def check_satellites_exist
      print "Projects have satellites? ... "

      unless Project.count > 0
        puts "can't check, you have no projects".magenta
188 189
        return
      end
R
Riyad Preukschas 已提交
190 191 192
      puts ""

      Project.find_each(batch_size: 100) do |project|
193
        print "#{project.name_with_namespace.yellow} ... "
R
Riyad Preukschas 已提交
194 195 196

        if project.satellite.exists?
          puts "yes".green
197 198
        elsif project.empty_repo?
          puts "can't create, repository is empty".magenta
R
Riyad Preukschas 已提交
199 200 201
        else
          puts "no".red
          try_fixing_it(
202
            sudo_gitlab("bundle exec rake gitlab:satellites:create RAILS_ENV=production"),
203 204
            "If necessary, remove the tmp/repo_satellites directory ...",
            "... and rerun the above command"
R
Riyad Preukschas 已提交
205 206 207 208
          )
          for_more_information(
            "doc/raketasks/maintenance.md "
          )
R
Riyad Preukschas 已提交
209
          fix_and_rerun
R
Riyad Preukschas 已提交
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224
        end
      end
    end

    def check_log_writable
      print "Log directory writable? ... "

      log_path = Rails.root.join("log")

      if File.writable?(log_path)
        puts "yes".green
      else
        puts "no".red
        try_fixing_it(
          "sudo chown -R gitlab #{log_path}",
B
bassrock 已提交
225
          "sudo chmod -R u+rwX #{log_path}"
R
Riyad Preukschas 已提交
226 227 228 229
        )
        for_more_information(
          see_installation_guide_section "GitLab"
        )
R
Riyad Preukschas 已提交
230
        fix_and_rerun
R
Riyad Preukschas 已提交
231 232 233 234 235 236 237 238 239 240 241 242 243 244
      end
    end

    def check_tmp_writable
      print "Tmp directory writable? ... "

      tmp_path = Rails.root.join("tmp")

      if File.writable?(tmp_path)
        puts "yes".green
      else
        puts "no".red
        try_fixing_it(
          "sudo chown -R gitlab #{tmp_path}",
B
bassrock 已提交
245
          "sudo chmod -R u+rwX #{tmp_path}"
R
Riyad Preukschas 已提交
246 247 248 249
        )
        for_more_information(
          see_installation_guide_section "GitLab"
        )
R
Riyad Preukschas 已提交
250
        fix_and_rerun
R
Riyad Preukschas 已提交
251
      end
R
Riyad Preukschas 已提交
252
    end
253

254
    def check_redis_version
255 256
      print "Redis version >= 2.0.0? ... "

257 258
      if run_and_match("redis-cli --version", /redis-cli 2.\d.\d/)
        puts "yes".green
259
      else
260 261
        puts "no".red
        try_fixing_it(
262
          "Update your redis server to a version >= 2.0.0"
263 264 265 266 267 268
        )
        for_more_information(
          "gitlab-public-wiki/wiki/Trouble-Shooting-Guide in section sidekiq"
        )
        fix_and_rerun
      end
269
    end
R
Riyad Preukschas 已提交
270 271
  end

R
Riyad Preukschas 已提交
272 273


R
Riyad Preukschas 已提交
274 275 276
  namespace :env do
    desc "GITLAB | Check the configuration of the environment"
    task check: :environment  do
R
Riyad Preukschas 已提交
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291
      warn_user_is_not_gitlab
      start_checking "Environment"

      check_gitlab_git_config
      check_python2_exists
      check_python2_version

      finished_checking "Environment"
    end


    # Checks
    ########################

    def check_gitlab_git_config
292 293
      gitlab_user = Gitlab.config.gitlab.user
      print "Git configured for #{gitlab_user} user? ... "
R
Riyad Preukschas 已提交
294 295 296

      options = {
        "user.name"  => "GitLab",
297
        "user.email" => Gitlab.config.gitlab.email_from
R
Riyad Preukschas 已提交
298 299 300 301 302 303 304 305 306 307
      }
      correct_options = options.map do |name, value|
        run("git config --global --get #{name}").try(:squish) == value
      end

      if correct_options.all?
        puts "yes".green
      else
        puts "no".red
        try_fixing_it(
308 309
          sudo_gitlab("git config --global user.name  \"#{options["user.name"]}\""),
          sudo_gitlab("git config --global user.email \"#{options["user.email"]}\"")
R
Riyad Preukschas 已提交
310 311 312 313
        )
        for_more_information(
          see_installation_guide_section "GitLab"
        )
R
Riyad Preukschas 已提交
314
        fix_and_rerun
R
Riyad Preukschas 已提交
315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333
      end
    end

    def check_python2_exists
      print "Has python2? ... "

      # Python prints its version to STDERR
      # so we can't just use run("python2 --version")
      if run_and_match("which python2", /python2$/)
        puts "yes".green
      else
        puts "no".red
        try_fixing_it(
          "Make sure you have Python 2.5+ installed",
          "Link it to python2"
        )
        for_more_information(
          see_installation_guide_section "Packages / Dependencies"
        )
R
Riyad Preukschas 已提交
334
        fix_and_rerun
R
Riyad Preukschas 已提交
335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359
      end
    end

    def check_python2_version
      print "python2 is supported version? ... "

      # Python prints its version to STDERR
      # so we can't just use run("python2 --version")

      unless run_and_match("which python2", /python2$/)
        puts "can't check because of previous errors".magenta
        return
      end

      if `python2 --version 2>&1` =~ /2\.[567]\.\d/
        puts "yes".green
      else
        puts "no".red
        try_fixing_it(
          "Make sure you have Python 2.5+ installed",
          "Link it to python2"
        )
        for_more_information(
          see_installation_guide_section "Packages / Dependencies"
        )
R
Riyad Preukschas 已提交
360
        fix_and_rerun
R
Riyad Preukschas 已提交
361
      end
R
Riyad Preukschas 已提交
362 363 364
    end
  end

R
Riyad Preukschas 已提交
365 366


367
  namespace :gitlab_shell do
B
Ben Bodenmiller 已提交
368
    desc "GITLAB | Check the configuration of GitLab Shell"
R
Riyad Preukschas 已提交
369
    task check: :environment  do
R
Riyad Preukschas 已提交
370
      warn_user_is_not_gitlab
B
Ben Bodenmiller 已提交
371
      start_checking "GitLab Shell"
R
Riyad Preukschas 已提交
372

373
      check_gitlab_shell
R
Riyad Preukschas 已提交
374
      check_repo_base_exists
375
      check_repo_base_is_not_symlink
R
Riyad Preukschas 已提交
376 377
      check_repo_base_user_and_group
      check_repo_base_permissions
378 379
      check_update_hook_is_up_to_date
      check_repos_update_hooks_is_link
380
      check_gitlab_shell_self_test
R
Riyad Preukschas 已提交
381

B
Ben Bodenmiller 已提交
382
      finished_checking "GitLab Shell"
R
Riyad Preukschas 已提交
383 384 385 386 387 388 389
    end


    # Checks
    ########################


390 391
    def check_update_hook_is_up_to_date
      print "update hook up-to-date? ... "
R
Riyad Preukschas 已提交
392

393
      hook_file = "update"
394
      gitlab_shell_hooks_path = Gitlab.config.gitlab_shell.hooks_path
395 396
      gitlab_shell_hook_file  = File.join(gitlab_shell_hooks_path, hook_file)
      gitlab_shell_ssh_user = Gitlab.config.gitlab_shell.ssh_user
R
Riyad Preukschas 已提交
397

398
      unless File.exists?(gitlab_shell_hook_file)
R
Riyad Preukschas 已提交
399
        puts "can't check because of previous errors".magenta
400 401 402
        return
      end

403
      puts "yes".green
R
Riyad Preukschas 已提交
404 405 406 407 408
    end

    def check_repo_base_exists
      print "Repo base directory exists? ... "

409
      repo_base_path = Gitlab.config.gitlab_shell.repos_path
R
Riyad Preukschas 已提交
410 411 412 413 414 415 416

      if File.exists?(repo_base_path)
        puts "yes".green
      else
        puts "no".red
        puts "#{repo_base_path} is missing".red
        try_fixing_it(
B
Ben Bodenmiller 已提交
417
          "This should have been created when setting up GitLab Shell.",
R
Riyad Preukschas 已提交
418
          "Make sure it's set correctly in config/gitlab.yml",
B
Ben Bodenmiller 已提交
419
          "Make sure GitLab Shell is installed correctly."
R
Riyad Preukschas 已提交
420 421
        )
        for_more_information(
B
Ben Bodenmiller 已提交
422
          see_installation_guide_section "GitLab Shell"
R
Riyad Preukschas 已提交
423
        )
R
Riyad Preukschas 已提交
424
        fix_and_rerun
R
Riyad Preukschas 已提交
425 426 427
      end
    end

428 429 430
    def check_repo_base_is_not_symlink
      print "Repo base directory is a symlink? ... "

431
      repo_base_path = Gitlab.config.gitlab_shell.repos_path
432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447
      unless File.exists?(repo_base_path)
        puts "can't check because of previous errors".magenta
        return
      end

      unless File.symlink?(repo_base_path)
        puts "no".green
      else
        puts "yes".red
        try_fixing_it(
          "Make sure it's set to the real directory in config/gitlab.yml"
        )
        fix_and_rerun
      end
    end

R
Riyad Preukschas 已提交
448
    def check_repo_base_permissions
449
      print "Repo base access is drwxrws---? ... "
R
Riyad Preukschas 已提交
450

451
      repo_base_path = Gitlab.config.gitlab_shell.repos_path
R
Riyad Preukschas 已提交
452 453
      unless File.exists?(repo_base_path)
        puts "can't check because of previous errors".magenta
454 455 456
        return
      end

457
      if File.stat(repo_base_path).mode.to_s(8).ends_with?("2770")
R
Riyad Preukschas 已提交
458 459 460 461
        puts "yes".green
      else
        puts "no".red
        try_fixing_it(
462
          "sudo chmod -R ug+rwX,o-rwx #{repo_base_path}",
463
          "sudo chmod -R ug-s #{repo_base_path}",
464
          "find #{repo_base_path} -type d -print0 | sudo xargs -0 chmod g+s"
R
Riyad Preukschas 已提交
465 466
        )
        for_more_information(
B
Ben Bodenmiller 已提交
467
          see_installation_guide_section "GitLab Shell"
R
Riyad Preukschas 已提交
468
        )
R
Riyad Preukschas 已提交
469
        fix_and_rerun
R
Riyad Preukschas 已提交
470 471 472 473
      end
    end

    def check_repo_base_user_and_group
474 475 476
      gitlab_shell_ssh_user = Gitlab.config.gitlab_shell.ssh_user
      gitlab_shell_owner_group = Gitlab.config.gitlab_shell.owner_group
      print "Repo base owned by #{gitlab_shell_ssh_user}:#{gitlab_shell_owner_group}? ... "
R
Riyad Preukschas 已提交
477

478
      repo_base_path = Gitlab.config.gitlab_shell.repos_path
R
Riyad Preukschas 已提交
479 480
      unless File.exists?(repo_base_path)
        puts "can't check because of previous errors".magenta
481 482 483
        return
      end

484 485 486
      uid = uid_for(gitlab_shell_ssh_user)
      gid = gid_for(gitlab_shell_owner_group)
      if File.stat(repo_base_path).uid == uid && File.stat(repo_base_path).gid == gid
R
Riyad Preukschas 已提交
487
        puts "yes".green
488
      else
R
Riyad Preukschas 已提交
489
        puts "no".red
490
        puts "  User id for #{gitlab_shell_ssh_user}: #{uid}. Groupd id for #{gitlab_shell_owner_group}: #{gid}".blue
R
Riyad Preukschas 已提交
491
        try_fixing_it(
492
          "sudo chown -R #{gitlab_shell_ssh_user}:#{gitlab_shell_owner_group} #{repo_base_path}"
R
Riyad Preukschas 已提交
493 494
        )
        for_more_information(
B
Ben Bodenmiller 已提交
495
          see_installation_guide_section "GitLab Shell"
R
Riyad Preukschas 已提交
496
        )
R
Riyad Preukschas 已提交
497
        fix_and_rerun
R
Riyad Preukschas 已提交
498 499 500
      end
    end

501 502
    def check_repos_update_hooks_is_link
      print "update hooks in repos are links: ... "
R
Riyad Preukschas 已提交
503

504
      hook_file = "update"
505
      gitlab_shell_hooks_path = Gitlab.config.gitlab_shell.hooks_path
506 507
      gitlab_shell_hook_file  = File.join(gitlab_shell_hooks_path, hook_file)
      gitlab_shell_ssh_user = Gitlab.config.gitlab_shell.ssh_user
R
Riyad Preukschas 已提交
508

509
      unless File.exists?(gitlab_shell_hook_file)
R
Riyad Preukschas 已提交
510 511 512
        puts "can't check because of previous errors".magenta
        return
      end
513

R
Riyad Preukschas 已提交
514 515 516 517 518
      unless Project.count > 0
        puts "can't check, you have no projects".magenta
        return
      end
      puts ""
519

R
Riyad Preukschas 已提交
520
      Project.find_each(batch_size: 100) do |project|
521
        print "#{project.name_with_namespace.yellow} ... "
522

R
Riyad Preukschas 已提交
523 524
        if project.empty_repo?
          puts "repository is empty".magenta
R
Riyad Preukschas 已提交
525
        else
R
Riyad Preukschas 已提交
526 527 528 529 530
          project_hook_file = File.join(project.repository.path_to_repo, "hooks", hook_file)

          unless File.exists?(project_hook_file)
            puts "missing".red
            try_fixing_it(
531
              "sudo -u #{gitlab_shell_ssh_user} ln -sf #{gitlab_shell_hook_file} #{project_hook_file}"
R
Riyad Preukschas 已提交
532 533
            )
            for_more_information(
M
Martin Bastien 已提交
534
              "#{gitlab_shell_user_home}/gitlab-shell/support/rewrite-hooks.sh"
R
Riyad Preukschas 已提交
535 536 537 538 539 540
            )
            fix_and_rerun
            next
          end

          if File.lstat(project_hook_file).symlink? &&
541
              File.realpath(project_hook_file) == File.realpath(gitlab_shell_hook_file)
R
Riyad Preukschas 已提交
542 543
            puts "ok".green
          else
B
Ben Bodenmiller 已提交
544
            puts "not a link to GitLab Shell's hook".red
R
Riyad Preukschas 已提交
545
            try_fixing_it(
546
              "sudo -u #{gitlab_shell_ssh_user} ln -sf #{gitlab_shell_hook_file} #{project_hook_file}"
R
Riyad Preukschas 已提交
547 548 549 550 551 552
            )
            for_more_information(
              "lib/support/rewrite-hooks.sh"
            )
            fix_and_rerun
          end
553 554
        end
      end
R
Riyad Preukschas 已提交
555
    end
R
Riyad Preukschas 已提交
556

557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573
    def check_gitlab_shell_self_test
      gitlab_shell_repo_base = File.expand_path('gitlab-shell', gitlab_shell_user_home)
      check_cmd = File.expand_path('bin/check', gitlab_shell_repo_base)
      puts "Running #{check_cmd}"
      if system(check_cmd, chdir: gitlab_shell_repo_base)
        puts 'gitlab-shell self-check successful'.green
      else
        puts 'gitlab-shell self-check failed'.red
        try_fixing_it(
          'Make sure GitLab is running;',
          'Check the gitlab-shell configuration file:',
          sudo_gitlab("editor #{File.expand_path('config.yml', gitlab_shell_repo_base)}")
        )
        fix_and_rerun
      end
    end

H
Hiroyuki Sato 已提交
574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599
    def check_projects_have_namespace
      print "projects have namespace: ... "

      unless Project.count > 0
        puts "can't check, you have no projects".magenta
        return
      end
      puts ""

      Project.find_each(batch_size: 100) do |project|
        print "#{project.name_with_namespace.yellow} ... "

        if project.namespace
          puts "yes".green
        else
          puts "no".red
          try_fixing_it(
            "Migrate global projects"
          )
          for_more_information(
            "doc/update/5.4-to-6.0.md in section \"#global-projects\""
          )
          fix_and_rerun
        end
      end
    end
R
Riyad Preukschas 已提交
600 601 602 603

    # Helper methods
    ########################

604 605
    def gitlab_shell_user_home
      File.expand_path("~#{Gitlab.config.gitlab_shell.ssh_user}")
R
Riyad Preukschas 已提交
606 607
    end

608
    def gitlab_shell_version
M
Martin Bastien 已提交
609
      gitlab_shell_version_file = "#{gitlab_shell_user_home}/gitlab-shell/VERSION"
610 611
      if File.readable?(gitlab_shell_version_file)
        File.read(gitlab_shell_version_file)
R
Riyad Preukschas 已提交
612 613 614
      end
    end

615 616
    def has_gitlab_shell3?
      gitlab_shell_version.try(:start_with?, "v3.")
R
Riyad Preukschas 已提交
617
    end
R
Riyad Preukschas 已提交
618
  end
619

R
Riyad Preukschas 已提交
620 621


R
Riyad Preukschas 已提交
622
  namespace :sidekiq do
D
Dmitriy Zaporozhets 已提交
623
    desc "GITLAB | Check the configuration of Sidekiq"
R
Riyad Preukschas 已提交
624
    task check: :environment  do
R
Riyad Preukschas 已提交
625
      warn_user_is_not_gitlab
R
Riyad Preukschas 已提交
626
      start_checking "Sidekiq"
R
Riyad Preukschas 已提交
627

R
Riyad Preukschas 已提交
628
      check_sidekiq_running
R
Riyad Preukschas 已提交
629

R
Riyad Preukschas 已提交
630
      finished_checking "Sidekiq"
R
Riyad Preukschas 已提交
631 632 633 634 635 636
    end


    # Checks
    ########################

R
Riyad Preukschas 已提交
637
    def check_sidekiq_running
R
Riyad Preukschas 已提交
638 639
      print "Running? ... "

640
      if run_and_match("ps aux | grep -i sidekiq", /sidekiq \d+\.\d+\.\d+.+$/)
R
Riyad Preukschas 已提交
641 642 643 644
        puts "yes".green
      else
        puts "no".red
        try_fixing_it(
645
          sudo_gitlab("bundle exec rake sidekiq:start RAILS_ENV=production")
R
Riyad Preukschas 已提交
646 647 648
        )
        for_more_information(
          see_installation_guide_section("Install Init Script"),
D
Dmitriy Zaporozhets 已提交
649
          "see log/sidekiq.log for possible errors"
R
Riyad Preukschas 已提交
650
        )
R
Riyad Preukschas 已提交
651
        fix_and_rerun
R
Riyad Preukschas 已提交
652 653 654 655 656 657 658 659
      end
    end
  end


  # Helper methods
  ##########################

R
Riyad Preukschas 已提交
660
  def fix_and_rerun
R
Riyad Preukschas 已提交
661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686
    puts "  Please #{"fix the error above"} and rerun the checks.".red
  end

  def for_more_information(*sources)
    sources = sources.shift if sources.first.is_a?(Array)

    puts "  For more information see:".blue
    sources.each do |source|
      puts "  #{source}"
    end
  end

  def finished_checking(component)
    puts ""
    puts "Checking #{component.yellow} ... #{"Finished".green}"
    puts ""
  end

  def see_database_guide
    "doc/install/databases.md"
  end

  def see_installation_guide_section(section)
    "doc/install/installation.md in section \"#{section}\""
  end

687 688 689 690 691
  def sudo_gitlab(command)
    gitlab_user = Gitlab.config.gitlab.user
    "sudo -u #{gitlab_user} -H #{command}"
  end

R
Riyad Preukschas 已提交
692 693 694 695 696 697 698 699 700 701 702 703 704
  def start_checking(component)
    puts "Checking #{component.yellow} ..."
    puts ""
  end

  def try_fixing_it(*steps)
    steps = steps.shift if steps.first.is_a?(Array)

    puts "  Try fixing it:".blue
    steps.each do |step|
      puts "  #{step}"
    end
  end
705 706

  def check_gitlab_shell
H
Hiroyuki Sato 已提交
707
    required_version = Gitlab::VersionInfo.new(1, 7, 1)
708
    current_version = Gitlab::VersionInfo.parse(gitlab_shell_version)
709

710
    print "GitLab Shell version >= #{required_version} ? ... "
S
Sato Hiroyuki 已提交
711
    if current_version.valid? && required_version <= current_version
712
      puts "OK (#{current_version})".green
713
    else
714
      puts "FAIL. Please update gitlab-shell to #{required_version} from #{current_version}".red
715 716
    end
  end
717 718

  def check_git_version
719
    required_version = Gitlab::VersionInfo.new(1, 7, 10)
720
    current_version = Gitlab::VersionInfo.parse(run("#{Gitlab.config.git.bin_path} --version"))
S
Sato Hiroyuki 已提交
721

722
    puts "Your git bin path is \"#{Gitlab.config.git.bin_path}\""
S
Sato Hiroyuki 已提交
723 724
    print "Git version >= #{required_version} ? ... "

S
Sato Hiroyuki 已提交
725
    if current_version.valid? && required_version <= current_version
726
        puts "yes (#{current_version})".green
727 728 729
    else
      puts "no".red
      try_fixing_it(
S
Sato Hiroyuki 已提交
730
        "Update your git to a version >= #{required_version} from #{current_version}"
731 732 733 734
      )
      fix_and_rerun
    end
  end
735
end