GitLab Omnibusロゴ差し替えスクリプト


研究室のGitLabをfrom sourceからOmnibus packageに移行した．
そこでロゴ(狐)の差し替えをする際に少しハマり，スクリプトを書いたのでメモしておく．

## 7.13以上対応版

GitLab 7.13で，GitLabのロゴがオシャレになった．

  - [GitLab 7.13 released with a Customizable Project Dashboard and even better Approvals | GitLab](https://about.gitlab.com/2015/07/22/gitlab-7-13-released/)
  - [Replace old logo with new one (f5e0e5c0) | Commits | GitLab.org / GitLab Community Edition | GitLab](https://gitlab.com/gitlab-org/gitlab-ce/commit/f5e0e5c0a3660beba45c3533796b3c4d8d53926b)

この影響で，pngがsvgに差し替えられるなどの変更があったので，スクリプトを更新した．
svgの作成には，無料化された[Microsoft Expression Design 4](https://www.microsoft.com/expression/jpn/)を使用した．

  - `/opt/gitlab/embedded/service/gitlab-rails/app/assets/images/favicon.ico`
  - `/opt/gitlab/embedded/service/gitlab-rails/app/assets/images/logo.svg` (210x210px)
  - `/opt/gitlab/embedded/service/gitlab-rails/public/favicon.ico`
  - `/opt/gitlab/embedded/service/gitlab-rails/public/apple-touch-icon.png` (210x210px)
  - `/opt/gitlab/embedded/service/gitlab-rails/public/apple-touch-icon-precomposed.png` (210x210px)
  - `/opt/gitlab/embedded/service/gitlab-rails/public/logo.svg` (210x210px)

```sh:update.sh
#!/bin/sh

sudo gitlab-ctl stop
sudo chown -R git:git /opt/gitlab/embedded/service/gitlab-rails/public/assets
sudo cp *.ico *.svg /opt/gitlab/embedded/service/gitlab-rails/app/assets/images/
sudo cp *.ico *.png *.svg /opt/gitlab/embedded/service/gitlab-rails/public/
sudo gitlab-rake assets:clean assets:precompile
sudo chown -R root:root /opt/gitlab/embedded/service/gitlab-rails/public/assets
sudo gitlab-ctl start
```

## ロゴの差し替え方法

ロゴのpngの配置などは，[Gitlabのロゴを差し替える - Qiita](http://qiita.com/takanemu/items/019e220ce22d4d7735a2)に詳しく書かれている．
(今回使用したGitLab 7.9.1ではlogo-black.pngは不要なみたい．)

以下の2つのファイルを，適切なサイズの画像に差し替える．

  - `/opt/gitlab/embedded/service/gitlab-rails/app/assets/images/brand_logo.png`
  - `/opt/gitlab/embedded/service/gitlab-rails/app/assets/images/logo-white.png`

assets pipelineを更新する．ここでエラーが出て失敗した．

```
$ sudo gitlab-rake assets:precompile
rake aborted!
Errno::EACCES: Permission denied @ rb_sysopen - /opt/gitlab/embedded/service/gitlab-rails/public/assets/brand_logo-83a5201d76d99b08d6ee58076626a452.png
...
```

`public/assets/`のownerがrootになっているのが原因のようだ．

## 解決方法

`public/assets/`のownerをgitにしてから`assets:precompile`し，元に戻すことにした．
GitLabの更新の度に作業するのは面倒なので，ShellScriptを書いた．

```sh:update.sh
#!/bin/sh

sudo gitlab-ctl stop
sudo chown -R git:git /opt/gitlab/embedded/service/gitlab-rails/public/assets
sudo cp *.png /opt/gitlab/embedded/service/gitlab-rails/app/assets/images/
sudo gitlab-rake assets:clean assets:precompile
sudo chown -R root:root /opt/gitlab/embedded/service/gitlab-rails/public/assets
sudo gitlab-ctl start
```

以下のようにpngとスクリプトを配置して`./update.sh`を実行すれば良い．

```
gitlab_logo
|-- brand_logo.png
|-- logo-white.png
|-- update.sh
```

## おわりに

![gitlab.png](https://qiita-image-store.s3.amazonaws.com/0/58742/d756aeb8-629a-3732-63b5-4477d27d0c89.png "gitlab.png")

今後の研究室サーバの引き継ぎも考えて，Omnibusに移行しました．
`gitlab:backup:create`して，MySQLからPostgreSQLに変換して，リストアするだけなので簡単ですね．
作業に当たり，下記を参考にしました．

  - [Ubuntu で GitLab を Omnibus に移行し GitLab CI も使い始める - tilfin&#39;s note](http://tilfin.hatenablog.com/entry/2015/02/08/180944)
  - [GitLab.org / omnibus-gitlab | GitLab](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/update.md)