check.rake 18.2 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 25
      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
      check_satellites_exist
26
      check_redis_version
27
      check_git_version
R
Riyad Preukschas 已提交
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52

      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 已提交
53
        fix_and_rerun
R
Riyad Preukschas 已提交
54 55 56 57
      end
    end

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

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

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

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

      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
103
      unless Gitlab.config['git_host']
R
Riyad Preukschas 已提交
104
        puts "no".green
R
Riyad Preukschas 已提交
105
      else
R
Riyad Preukschas 已提交
106
        puts "yes".red
R
Riyad Preukschas 已提交
107
        try_fixing_it(
R
Riyad Preukschas 已提交
108
          "Backup your config/gitlab.yml",
R
Riyad Preukschas 已提交
109 110 111 112 113 114
          "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 已提交
115
        fix_and_rerun
R
Riyad Preukschas 已提交
116 117
      end
    end
118

R
Riyad Preukschas 已提交
119 120 121 122 123 124 125
    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 已提交
126
      else
R
Riyad Preukschas 已提交
127 128 129 130 131 132 133
        puts "no".red
        try_fixing_it(
          "Install the init script"
        )
        for_more_information(
          see_installation_guide_section "Install Init Script"
        )
R
Riyad Preukschas 已提交
134
        fix_and_rerun
R
Riyad Preukschas 已提交
135 136 137 138 139 140
      end
    end

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

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

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

149
      recipe_content = File.read(recipe_path)
R
Riyad Preukschas 已提交
150 151 152 153 154 155 156 157 158 159 160 161
      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 已提交
162
        fix_and_rerun
R
Riyad Preukschas 已提交
163 164 165 166 167 168 169 170 171 172
      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
173
      else
R
Riyad Preukschas 已提交
174 175
        puts "no".red
        try_fixing_it(
176
          sudo_gitlab("bundle exec rake db:migrate RAILS_ENV=production")
R
Riyad Preukschas 已提交
177
        )
R
Riyad Preukschas 已提交
178
        fix_and_rerun
R
Riyad Preukschas 已提交
179 180 181 182 183 184 185 186
      end
    end

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

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

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

        if project.satellite.exists?
          puts "yes".green
196 197
        elsif project.empty_repo?
          puts "can't create, repository is empty".magenta
R
Riyad Preukschas 已提交
198 199 200
        else
          puts "no".red
          try_fixing_it(
201
            sudo_gitlab("bundle exec rake gitlab:satellites:create RAILS_ENV=production"),
202 203
            "If necessary, remove the tmp/repo_satellites directory ...",
            "... and rerun the above command"
R
Riyad Preukschas 已提交
204 205 206 207
          )
          for_more_information(
            "doc/raketasks/maintenance.md "
          )
R
Riyad Preukschas 已提交
208
          fix_and_rerun
R
Riyad Preukschas 已提交
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
        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 已提交
224
          "sudo chmod -R u+rwX #{log_path}"
R
Riyad Preukschas 已提交
225 226 227 228
        )
        for_more_information(
          see_installation_guide_section "GitLab"
        )
R
Riyad Preukschas 已提交
229
        fix_and_rerun
R
Riyad Preukschas 已提交
230 231 232 233 234 235 236 237 238 239 240 241 242 243
      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 已提交
244
          "sudo chmod -R u+rwX #{tmp_path}"
R
Riyad Preukschas 已提交
245 246 247 248
        )
        for_more_information(
          see_installation_guide_section "GitLab"
        )
R
Riyad Preukschas 已提交
249
        fix_and_rerun
R
Riyad Preukschas 已提交
250
      end
R
Riyad Preukschas 已提交
251
    end
252

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

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

R
Riyad Preukschas 已提交
271 272


R
Riyad Preukschas 已提交
273 274 275
  namespace :env do
    desc "GITLAB | Check the configuration of the environment"
    task check: :environment  do
R
Riyad Preukschas 已提交
276 277 278 279 280 281 282 283 284 285 286 287 288 289 290
      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
291 292
      gitlab_user = Gitlab.config.gitlab.user
      print "Git configured for #{gitlab_user} user? ... "
R
Riyad Preukschas 已提交
293 294 295

      options = {
        "user.name"  => "GitLab",
296
        "user.email" => Gitlab.config.gitlab.email_from
R
Riyad Preukschas 已提交
297 298 299 300 301 302 303 304 305 306
      }
      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(
307 308
          sudo_gitlab("git config --global user.name  \"#{options["user.name"]}\""),
          sudo_gitlab("git config --global user.email \"#{options["user.email"]}\"")
R
Riyad Preukschas 已提交
309 310 311 312
        )
        for_more_information(
          see_installation_guide_section "GitLab"
        )
R
Riyad Preukschas 已提交
313
        fix_and_rerun
R
Riyad Preukschas 已提交
314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332
      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 已提交
333
        fix_and_rerun
R
Riyad Preukschas 已提交
334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358
      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 已提交
359
        fix_and_rerun
R
Riyad Preukschas 已提交
360
      end
R
Riyad Preukschas 已提交
361 362 363
    end
  end

R
Riyad Preukschas 已提交
364 365


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

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

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


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


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

391
      hook_file = "update"
392
      gitlab_shell_hooks_path = Gitlab.config.gitlab_shell.hooks_path
393 394
      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 已提交
395

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

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

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

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

      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 已提交
415
          "This should have been created when setting up GitLab Shell.",
R
Riyad Preukschas 已提交
416
          "Make sure it's set correctly in config/gitlab.yml",
B
Ben Bodenmiller 已提交
417
          "Make sure GitLab Shell is installed correctly."
R
Riyad Preukschas 已提交
418 419
        )
        for_more_information(
B
Ben Bodenmiller 已提交
420
          see_installation_guide_section "GitLab Shell"
R
Riyad Preukschas 已提交
421
        )
R
Riyad Preukschas 已提交
422
        fix_and_rerun
R
Riyad Preukschas 已提交
423 424 425
      end
    end

426 427 428
    def check_repo_base_is_not_symlink
      print "Repo base directory is a symlink? ... "

429
      repo_base_path = Gitlab.config.gitlab_shell.repos_path
430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445
      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 已提交
446
    def check_repo_base_permissions
447
      print "Repo base access is drwxrws---? ... "
R
Riyad Preukschas 已提交
448

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

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

    def check_repo_base_user_and_group
472 473 474
      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 已提交
475

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

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

497 498
    def check_repos_update_hooks_is_link
      print "update hooks in repos are links: ... "
R
Riyad Preukschas 已提交
499

500
      hook_file = "update"
501
      gitlab_shell_hooks_path = Gitlab.config.gitlab_shell.hooks_path
502 503
      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 已提交
504

505
      unless File.exists?(gitlab_shell_hook_file)
R
Riyad Preukschas 已提交
506 507 508
        puts "can't check because of previous errors".magenta
        return
      end
509

R
Riyad Preukschas 已提交
510 511 512 513 514
      unless Project.count > 0
        puts "can't check, you have no projects".magenta
        return
      end
      puts ""
515

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

R
Riyad Preukschas 已提交
519 520
        if project.empty_repo?
          puts "repository is empty".magenta
R
Riyad Preukschas 已提交
521
        else
R
Riyad Preukschas 已提交
522 523 524 525 526
          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(
527
              "sudo -u #{gitlab_shell_ssh_user} ln -sf #{gitlab_shell_hook_file} #{project_hook_file}"
R
Riyad Preukschas 已提交
528 529
            )
            for_more_information(
M
Martin Bastien 已提交
530
              "#{gitlab_shell_user_home}/gitlab-shell/support/rewrite-hooks.sh"
R
Riyad Preukschas 已提交
531 532 533 534 535 536
            )
            fix_and_rerun
            next
          end

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


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

557 558
    def gitlab_shell_user_home
      File.expand_path("~#{Gitlab.config.gitlab_shell.ssh_user}")
R
Riyad Preukschas 已提交
559 560
    end

561
    def gitlab_shell_version
M
Martin Bastien 已提交
562
      gitlab_shell_version_file = "#{gitlab_shell_user_home}/gitlab-shell/VERSION"
563 564
      if File.readable?(gitlab_shell_version_file)
        File.read(gitlab_shell_version_file)
R
Riyad Preukschas 已提交
565 566 567
      end
    end

568 569
    def has_gitlab_shell3?
      gitlab_shell_version.try(:start_with?, "v3.")
R
Riyad Preukschas 已提交
570
    end
R
Riyad Preukschas 已提交
571
  end
572

R
Riyad Preukschas 已提交
573 574


R
Riyad Preukschas 已提交
575
  namespace :sidekiq do
D
Dmitriy Zaporozhets 已提交
576
    desc "GITLAB | Check the configuration of Sidekiq"
R
Riyad Preukschas 已提交
577
    task check: :environment  do
R
Riyad Preukschas 已提交
578
      warn_user_is_not_gitlab
R
Riyad Preukschas 已提交
579
      start_checking "Sidekiq"
R
Riyad Preukschas 已提交
580

R
Riyad Preukschas 已提交
581
      check_sidekiq_running
R
Riyad Preukschas 已提交
582

R
Riyad Preukschas 已提交
583
      finished_checking "Sidekiq"
R
Riyad Preukschas 已提交
584 585 586 587 588 589
    end


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

R
Riyad Preukschas 已提交
590
    def check_sidekiq_running
R
Riyad Preukschas 已提交
591 592
      print "Running? ... "

593
      if run_and_match("ps aux | grep -i sidekiq", /sidekiq \d+\.\d+\.\d+.+$/)
R
Riyad Preukschas 已提交
594 595 596 597
        puts "yes".green
      else
        puts "no".red
        try_fixing_it(
598
          sudo_gitlab("bundle exec rake sidekiq:start RAILS_ENV=production")
R
Riyad Preukschas 已提交
599 600 601
        )
        for_more_information(
          see_installation_guide_section("Install Init Script"),
D
Dmitriy Zaporozhets 已提交
602
          "see log/sidekiq.log for possible errors"
R
Riyad Preukschas 已提交
603
        )
R
Riyad Preukschas 已提交
604
        fix_and_rerun
R
Riyad Preukschas 已提交
605 606 607 608 609 610 611 612
      end
    end
  end


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

R
Riyad Preukschas 已提交
613
  def fix_and_rerun
R
Riyad Preukschas 已提交
614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639
    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

640 641 642 643 644
  def sudo_gitlab(command)
    gitlab_user = Gitlab.config.gitlab.user
    "sudo -u #{gitlab_user} -H #{command}"
  end

R
Riyad Preukschas 已提交
645 646 647 648 649 650 651 652 653 654 655 656 657
  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
658 659

  def check_gitlab_shell
660
    required_version = Gitlab::VersionInfo.new(1, 7, 0)
661
    current_version = Gitlab::VersionInfo.parse(gitlab_shell_version)
662

663
    print "GitLab Shell version >= #{required_version} ? ... "
S
Sato Hiroyuki 已提交
664
    if current_version.valid? && required_version <= current_version
665
      puts "OK (#{current_version})".green
666
    else
667
      puts "FAIL. Please update gitlab-shell to #{required_version} from #{current_version}".red
668 669
    end
  end
670 671

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

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

S
Sato Hiroyuki 已提交
678
    if current_version.valid? && required_version <= current_version
679
        puts "yes (#{current_version})".green
680 681 682
    else
      puts "no".red
      try_fixing_it(
S
Sato Hiroyuki 已提交
683
        "Update your git to a version >= #{required_version} from #{current_version}"
684 685 686 687
      )
      fix_and_rerun
    end
  end
688
end