BigW Consortium Gitlab

5.4-to-6.0.md 5.42 KB
Newer Older
Sytse Sijbrandij committed
1
# From 5.4 to 6.0
2
*Make sure you view this [upgrade guide from the `master` branch](../../../master/doc/update/5.4-to-6.0.md) for the most up to date instructions.*
Sytse Sijbrandij committed
3

4
## Warning
5

6
GitLab 6.0 is affected by critical security vulnerabilities CVE-2013-4490 and CVE-2013-4489.
7

8 9 10
**You need to follow this guide first, before updating past 6.0, as it contains critical migration steps that are only present
in the `6-0-stable` branch**

11
## Deprecations
Sytse Sijbrandij committed
12

13
### Global projects
Sytse Sijbrandij committed
14

Sytse Sijbrandij committed
15
The root (global) namespace for projects is deprecated.
16

17
So you need to move all your global projects under groups or users manually before update or they will be automatically moved to the project owner namespace during the update. When a project is moved all its members will receive an email with instructions how to update their git remote URL. Please make sure you disable sending email when you do a test of the upgrade.
Sytse Sijbrandij committed
18

19
### Teams
Sytse Sijbrandij committed
20

21
We introduce group membership in 6.0 as a replacement for teams.
22

Sytse Sijbrandij committed
23
The old combination of groups and teams was confusing for a lot of people.
24

Sytse Sijbrandij committed
25
And when the members of a team where changed this wasn't reflected in the project permissions.
26

Sytse Sijbrandij committed
27
In GitLab 6.0 you will be able to add members to a group with a permission level for each member.
28

Sytse Sijbrandij committed
29
These group members will have access to the projects in that group.
30

Sytse Sijbrandij committed
31
Any changes to group members will immediately be reflected in the project permissions.
32

Sytse Sijbrandij committed
33 34
You can even have multiple owners for a group, greatly simplifying administration.

35
## 0. Backup
Sytse Sijbrandij committed
36

37
It's useful to make a backup just in case things go south (with MySQL, this may require granting "LOCK TABLES" privileges to the GitLab user on the database version):
Sytse Sijbrandij committed
38 39 40

```bash
cd /home/git/gitlab
41
sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production
Sytse Sijbrandij committed
42 43
```

44
## 1. Stop server
Sytse Sijbrandij committed
45 46 47

    sudo service gitlab stop

48
## 2. Get latest code
Sytse Sijbrandij committed
49 50 51 52

```bash
cd /home/git/gitlab
sudo -u git -H git fetch
lurdan committed
53
sudo -u git -H git checkout 6-0-stable
Sytse Sijbrandij committed
54 55
```

56
## 3. Update gitlab-shell
57 58 59 60

```bash
cd /home/git/gitlab-shell
sudo -u git -H git fetch
61
sudo -u git -H git checkout v1.7.9
62 63
```

64
## 4. Install additional packages
Sytse Sijbrandij committed
65 66 67 68 69 70

```bash
# For reStructuredText markup language support install required package:
sudo apt-get install python-docutils
```

71
## 5. Install libs, migrations, etc.
Sytse Sijbrandij committed
72 73 74 75

```bash
cd /home/git/gitlab

76 77 78 79 80
# The Modernizr gem was yanked from RubyGems. It is required for GitLab >= 2.8.0
# Edit `Gemfile` and change `gem "modernizr", "2.5.3"` to
# `gem "modernizr-rails", "2.7.1"``
sudo -u git -H vim Gemfile

Sytse Sijbrandij committed
81
# MySQL
82 83 84 85 86

# Run a bundle install without deployment to generate the new Gemfile
sudo -u git -H bundle install --without development test postgres --no-deployment

# Install libs (with deployment this time)
Sytse Sijbrandij committed
87 88
sudo -u git -H bundle install --without development test postgres --deployment

89
# PostgreSQL
90 91 92 93 94

# Run a bundle install without deployment to generate the new Gemfile
sudo -u git -H bundle install --without development test mysql --no-deployment

# Install libs (with deployment this time)
Sytse Sijbrandij committed
95 96
sudo -u git -H bundle install --without development test mysql --deployment

97
# Both MySQL and PostgreSQL
Sytse Sijbrandij committed
98 99 100 101 102
sudo -u git -H bundle exec rake db:migrate RAILS_ENV=production
sudo -u git -H bundle exec rake migrate_groups RAILS_ENV=production
sudo -u git -H bundle exec rake migrate_global_projects RAILS_ENV=production
sudo -u git -H bundle exec rake migrate_keys RAILS_ENV=production
sudo -u git -H bundle exec rake migrate_inline_notes RAILS_ENV=production
103
sudo -u git -H bundle exec rake gitlab:satellites:create RAILS_ENV=production
Sytse Sijbrandij committed
104

105 106
# Clear redis cache
sudo -u git -H bundle exec rake cache:clear RAILS_ENV=production
107

108 109 110
# Clear and precompile assets
sudo -u git -H bundle exec rake assets:clean RAILS_ENV=production
sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production
Sytse Sijbrandij committed
111 112
```

113
## 6. Update config files
Sytse Sijbrandij committed
114

115 116
Note: We switched from Puma in GitLab 5.4 to unicorn in GitLab 6.0.

117 118
- Make `/home/git/gitlab/config/gitlab.yml` the same as https://gitlab.com/gitlab-org/gitlab-ce/blob/master/config/gitlab.yml.example but with your settings.
- Make `/home/git/gitlab/config/unicorn.rb` the same as https://gitlab.com/gitlab-org/gitlab-ce/blob/master/config/unicorn.rb.example but with your settings.
Sytse Sijbrandij committed
119

120
## 7. Update Init script
Sytse Sijbrandij committed
121 122 123

```bash
sudo rm /etc/init.d/gitlab
124
sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab
Sytse Sijbrandij committed
125 126 127
sudo chmod +x /etc/init.d/gitlab
```

128
## 8. Start application
Sytse Sijbrandij committed
129 130 131 132

    sudo service gitlab start
    sudo service nginx restart

133
## 9. Check application status
Sytse Sijbrandij committed
134 135 136 137 138 139 140 141 142 143

Check if GitLab and its environment are configured correctly:

    sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production

To make sure you didn't miss anything run a more thorough check with:

    sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production

If all items are green, then congratulations upgrade complete!
144

145 146
## Troubleshooting

147 148
The migrations in this update are very sensitive to incomplete or inconsistent data. If you have a long-running GitLab installation and some of the previous upgrades did not work out 100% correct this may bite you now. The following commands can be run in the rails console to look for 'bad' data.

149 150
All project owners should have an owner:

151 152 153 154
```
Project.all.select { |project| project.owner.blank? }
```

155 156
Every user should have a namespace:

157 158 159 160
```
User.all.select { |u| u.namespace.blank? }
```

161 162
Projects in the global namespace should not conflict with projects in the owner namespace:

163 164 165
```
Project.where(namespace_id: nil).select { |p| Project.where(path: p.path, namespace_id: p.owner.try(:namespace).try(:id)).present? }
```