読者です 読者をやめる 読者になる 読者になる

Ruby on Rails と歩む我が人生

Railsプログラマを目指す漢のRailsとの歩みの記録

GitLabのバックアップリストア方法

GitLab

f:id:tocguitar1:20170222090339j:plain

最近。。。

社内でGitを根付かせたく、GitLabを勝手に導入して有志を募り、勝手に運用することにしたんですが、思った通りというか、やっぱりというか、Gitの素晴らしさにみんな感動していて自分もGitLabを使うの初めてだったんですが、中々いいぞとなりました。

しかし、貧弱なりソースのサーバーで稼働させていたため、早めに移設しなければとなり、バックアップとリストアについて調べた際の知見となりやんす。

とにかくGitLabはインストールからバックアップ、リストア、バージョンアップまで超やりやすい素晴らしいソフトですね!

これが無料で使えるなんて信じられない!アメイジング

環境

  • OS:CentOS6.8
  • バックアップ側のGitLabバージョン:8.15.4
  • リストア側のGitLab:8.16.6

手順

バックアップ

バックアップしたいGitLabで以下のコマンドを打つだけ!

$ gitlab-rake gitlab:backup:create

すると、以下のディレクトリにバックアップファイルが生成されています。

/var/opt/gitlab/backups

-rw-------. 1 git git 3959173120  2月 21 18:09 2017 1487667729_2017_02_21_gitlab_backup.tar  

このファイルをSCPコマンド等でリストアしたいGitLabへ送りつけます。

※転送先でファイルのグループとユーザーがgitになっていることを確認!

リストア

リストアする側のGitLabで以下のコマンドを打つだけ!

$ gitlab-rake gitlab:backup:restore

※複数バックアップファイルがある場合は、以下のようにタイムスタンプ部分を指定する!

$ gitlab-rake gitlab:backup:restore BACKUP=1487667729_2017_02_21

以上!簡単!

つまづいたところ

じつはバックアップ側とリストア側でバージョン差分があったので、最初リストアするとき、下記エラーで怒られました。そしてGitLabのバージョンアップ方法が中々見つからず少し時間がかかりましたが、やはりバージョンアップも簡単でしたね!

$ gitlab-rake gitlab:backup:restore
Unpacking backup ... done                                                              
GitLab version mismatch:                                                               
  Your current GitLab version (8.16.6) differs from the GitLab version in the backup!  
  Please switch to the following version and try again:                                
  version: 8.15.4                                                                      
                                                                                       
Hint: git checkout v8.15.4                                                             

なので、バックアップ側のGitLabのバージョンを上げてからバックアップファイルを作成し、再度リストアしたところうまくいきました!バージョンアップもyumで最新のモジュール引っ張ってきて、reconfigureするだけだったのでほんとうに楽ちんでした!GitLab最高!!

$ yum install gitlab-ce
$ gitlab-ctl reconfigure

参考

ez-net.jp

WindowsのSSHクライアントをTeratermからPuttyに変えた

Putty

はじめに

ずっと使い慣れ親しんできたTeratermに別れを告げ、Puttyへ乗り換えたという甘く切ない物語。

なぜ乗り換えたのか

Teratermを使っていた理由

普段は仕事でWindows機を使っています。エンジニアになって最初に触ったSSHクライアントがTeratermでした。Teratermを使っている理由はまさに最初に使ったからというのが大きな理由となります。

メリットしては現在数百台のサーバーを運用・管理しているのですが、当初は100台程度だったので、TeratermのMenu機能で事が足りていたんですね。

Tera Term Menu Tutorial

あとはTeratermマクロという機能があり、NW機器系のコンフィグやログを採取する際にTeratermレンダリングエンジンがしょぼいため、あまり多くの情報を標準出力させるとログの表示が欠損したり表示がおかしくなったりするのでマクロを作成して回避するというような少しめんどくさいこともしたりすることもあります。

mag.osdn.jp

そんなこんなで特筆すべき使っていた理由はなく、まさになんとなくということです。

Teratermのデメリット

最近は基本的にVim+tmux+zshという構成で色々と作業することが多いため、以下の点が大きな問題となっていました。

  • tmuxで画面分割した状態でログなどをドバーッと流すと表示がおかしくなることがある
  • 全角半角でフォントを別々に設定できない

Puttyへ変更するメリット

Puttyは上記であげたデメリットをすべて解消してくれます。

tmuxで各種サーバーへ接続しているため、レンダリングエンジンの強さは非常に重要な要件となります。また、フォントを適切に設定することで見た目もいい感じになり、やる気が出てきますw

乗り換えの仕方

ダウンロード

以下のリンクからレンダリングエンジンがDirect2D/DirectWriteのモジュールをダウンロードします。使い方も同じページに書いてあるので参考にしてください。

iceiv+putty

PuTTY 0.60 ごった煮版 2007年8月6日版 に 諸々の機能 を追加したものをベースに、 テキストレンダリングエンジンを GDI から Direct2D/DirectWrite へ変更した、 アンチエイリアスとか半透明とかの単語に反応する人向けベータテスト準備中バージョン PuTTY です。

フォントの設定

メインのフォントはTop10Programmingで1位になったInconsolataを使っています。

hivelogic.com

日本語フォントにはMeiryoUI、代替フォントにもMeiryoUIを使用しています。

f:id:tocguitar1:20170130095906p:plain

全角、半角のフォントを別々に分けられることで日本語も良い感じに描写してくれます^^

f:id:tocguitar1:20170130100138p:plain

終わりに

いやー、いままで気になっていた部分がすべて解消されとてもいい感じです!そしてPuttyは「プティ」ではなく「パティ」と読むらしいのですがどうでもいいですねはい!

それでは良きPuttyライフをお過ごし下さい\(^o^)/

【Ansible】with_itemsループまとめ

Ansible インフラ

はじめに

AnsibleにはPlaybookの中でループを使うことにより、タスクを繰り返し実行することができます。

その中で一番良く使うであろうwith_itemsのループ処理をご紹介致します!

共通のルール

  • タスクからループ内の要素を使用する際はitemという名前の変数を用いる

with_items

単純にリストでループしたい場合に使う

- name: ディレクトリの作成
  file: path=/root/{{ item }} state=directory
  with_items:
    - test1
    - test2
    - test3

アイテムにはディクショナリを使用することも可能

- name: ディレクトリの作成
  file: path=/root/{{ item.name }} state=directory owner={{ item.user }} group={{ item.group }}
  with_items:
    - { name: test1, user: test1, group: test }
    - { name: test2, user: test2, group: test }
    - { name: test3, user: test3, group: test } 

リストのリストは1階層まで展開される

- debug:
    msg: "{{ item }}"
  with_items:
    - [ a, b, c ]
    - [ 4, 5, 6 ]

上記の場合、[ a, b, c, 4, 5, 6 ]という一つのリストをループさせた際と同じ挙動となる

複数のリストをまとめてループさせる

- vars:
    - staging: [ test1, test2, test3 ]
    - production: [ test4, test5, test6 ]

- name: ディレクトの作成
  file: path={{ item }} state=directory
  with_items:
    - "{{ staging }}"
    - "{{ production }}"

おわりに

with系のループ処理は色々あるので使い分けをうまくすれば効率的なPlaybookが書けそうですね!

ZabbixのアラートをSlackに通知させる

Zabbix Slack インフラ 備忘録

はじめに

現在業務で使用しているZabbixはメール通知だけなので、Slackにも通知するように設定してみました!

環境

  • CentOS6.x
  • Zabbix Server 2.4

やりかた

通知スクリプトの設定

こいつを使います。

github.com

配置

こいつを以下で定義されているディレクトリへ配置

/etc/zabbix/zabbix_server.conf

### Option: ExternalScripts
#       Full path to location of external scripts.
#       Default depends on compilation options.
#
# Mandatory: no
# Default:
# ExternalScripts=${datadir}/zabbix/externalscripts

ExternalScripts=/usr/lib/zabbix/externalscripts

SlackのIncomingWebhookのURIを取得

SlackのIncoming WebHooks設定画面から、チャンネルを選択し、WebHooksURIを取得する

f:id:tocguitar1:20170111100018p:plain

slack.shの編集

以下のCHANGEMEの部分を取得したURLで書き換える

# Slack incoming web-hook URL and user name
url='CHANGEME'      # example: https://hooks.slack.com/services/QW3R7Y/D34DC0D3/BCADFGabcDEF123

Zabbixの設定

詳細はこちらを見て下さい。

github.com

なぜかハマったところ

公式のREADME通りにやってもだめで、以下の箇所を設定したらできるようになりました!

f:id:tocguitar1:20170111101006p:plain

/usr/lib/zabbix/alertscripts/slack.sh '#nw_watcher' "{TRIGGER.STATUS}" "{TRIGGER.NAME}-{ITEM.VALUE1}"

おわりに

CentOS5.xとZabbixServer2.0の環境でも導入しようと思ったのですが、cURLのバージョンが低くて以下の手順でソースからコンパイルして新しいバージョンをインストールしようとして失敗しており積んでおります・・・orz

d.hatena.ne.jp

参考

okisanjp.hatenablog.jp

adachin.server-on.net

qiita.com

zabbix slack連携 - 世界を疑え

MacでrbenvでRuby2.x.xでインストールでBUILD FAILDでででで!!

Ruby

はじめに

Rubyのバージョンを2.0から2.3にあげようとしたらエラーが出てできなかった悲しい話です。

対処方法

出てきたエラー

toshiyuki@MacBook-Air [045843秒] [~/dotfiles] [master]
-> % rbenv install 2.3.0
Downloading ruby-2.3.0.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.bz2
Installing ruby-2.3.0...

BUILD FAILED (OS X 10.11.5 using ruby-build 20160602)

Inspect or clean up the working tree at /var/folders/0p/7j82ymzd0wd9nlxxz08927ww0000gn/T/ruby-build.20170103045921.71504
Results logged to /var/folders/0p/7j82ymzd0wd9nlxxz08927ww0000gn/T/ruby-build.20170103045921.71504.log

Last 10 log lines:
  Referenced from: /private/var/folders/0p/7j82ymzd0wd9nlxxz08927ww0000gn/T/ruby-build.20170103045921.71504/ruby-2.3.0/./miniruby (which was built for Mac OS X 10.12)
  Expected in: /usr/lib/libSystem.B.dylib

dyld: Symbol not found: _clock_gettime
  Referenced from: /private/var/folders/0p/7j82ymzd0wd9nlxxz08927ww0000gn/T/ruby-build.20170103045921.71504/ruby-2.3.0/./miniruby (which was built for Mac OS X 10.12)
  Expected in: /usr/lib/libSystem.B.dylib

make: *** [encdb.h] Trace/BPT trap: 5
make: *** Waiting for unfinished jobs....
make: *** [.rbconfig.time] Trace/BPT trap: 5

色々調べているとコマンドラインツールを必要なようなので確認

toshiyuki@MacBook-Air [05時26分37秒] [~]
-> % brew --config
HOMEBREW_VERSION: 0.9.9
ORIGIN: https://github.com/Homebrew/brew.git
HEAD: e3b6c96b5dbb3529832f19347781bc2cedd6ab5a
Last commit: 6 months ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: 4a355f7e67a625b03e87947f510196615fa21d99
Core tap last commit: 38 minutes ago
HOMEBREW_PREFIX: /usr/local
HOMEBREW_REPOSITORY: /usr/local
HOMEBREW_CELLAR: /usr/local/Cellar
HOMEBREW_BOTTLE_DOMAIN: https://homebrew.bintray.com
CPU: quad-core 64-bit broadwell
Clang: 8.0 build 800
Git: 2.9.0 => /usr/local/bin/git
Perl: /usr/bin/perl
Python: /usr/bin/python
Ruby: /usr/bin/ruby => /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
Java: 1.6.0_65-b14-468
System Ruby: 2.0.0-p648
OS X: 10.11.5-x86_64
Xcode: 8.2
CLT: N/A
X11: 2.7.9 => /opt/X11

CLT: N/A

コマンドラインツールのインストールを実施

toshiyuki@MacBook-Air [05時27分56秒] [~]
-> % xcode-select --install
xcode-select: note: install requested for command line developer tools

再度、brew --configで確認

toshiyuki@MacBook-Air [05時29分34秒] [~]
-> % brew --config
HOMEBREW_VERSION: 0.9.9
ORIGIN: https://github.com/Homebrew/brew.git
HEAD: e3b6c96b5dbb3529832f19347781bc2cedd6ab5a
Last commit: 6 months ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: 4a355f7e67a625b03e87947f510196615fa21d99
Core tap last commit: 43 minutes ago
HOMEBREW_PREFIX: /usr/local
HOMEBREW_REPOSITORY: /usr/local
HOMEBREW_CELLAR: /usr/local/Cellar
HOMEBREW_BOTTLE_DOMAIN: https://homebrew.bintray.com
CPU: quad-core 64-bit broadwell
Clang: 8.0 build 800
Git: 2.9.0 => /usr/local/bin/git
Perl: /usr/bin/perl
Python: /usr/bin/python
Ruby: /usr/bin/ruby => /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
Java: 1.6.0_65-b14-468
System Ruby: 2.0.0-p648
OS X: 10.11.5-x86_64
Xcode: 8.2
CLT: 8.2.0.0.1.1480973914
X11: 2.7.9 => /opt/X11

再度Rubyのインストールを実施!

toshiyuki@MacBook-Air [05時34分07秒] [~]
-> % rbenv install 2.3.1
Downloading ruby-2.3.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.bz2
Installing ruby-2.3.1...
Installed ruby-2.3.1 to /usr/local/opt/rbenv/versions/2.3.1

無事、インストールできました!

参考

www.task-notes.com

blog.tstylestudio.com

HomebrewでのXcodeライセンスの警告が出た話

zsh homebrew

はじめに

そろそろzshを導入しようと思いまして、MacbookAir様で使えるzshを確認しようとしたところエラーが出たんですわこれが。

エラー

MacBook-Air:~ toshiyuki$ brew info zsh
Error: You have not agreed to the Xcode license. Please resolve this by running:
  sudo xcodebuild -license

対処

書いてある通りにやってみただけですw

エラーに書いてある通り、sudo xcodebuild -licenseを実行します。

MacBook-Air:~ toshiyuki$ sudo xcodebuild -license
Password:


You have not agreed to the Xcode license agreements. You must agree to both license agreements below in order to use Xcode.

Hit the Enter key to view the license agreements at '/Applications/Xcode.app/Contents/Resources/English.lproj/License.rtf'

Apple Inc.

Xcode and Apple SDKs Agreement

という感じで色々英文がつらつらと出てきますが、以下のように最後にagreeしたらおしまいです。

By typing 'agree' you are agreeing to the terms of the software license agreements. Type 'print' to print them or anything else to cancel, [agree, print, cancel]   agree

再度、確認

MacBook-Air:~ toshiyuki$ brew info zsh
zsh: stable 5.2 (bottled), HEAD
UNIX shell (command interpreter)
http://www.zsh.org/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/zsh.rb
==> Dependencies
Required: gdbm ✘, pcre ✘
==> Options
--without-etcdir
    Disable the reading of Zsh rc files in /etc
--HEAD
    Install HEAD version
==> Caveats
In order to use this build of zsh as your login shell,
it must be added to /etc/shells.
Add the following to your zshrc to access the online help:
  unalias run-help
  autoload run-help
  HELPDIR=/usr/local/share/zsh/help

おわりに

今年はzsh使いになりたいです。

Zabbixで特定の曜日、時間帯に特定のトリガーを抑止する方法

Zabbix インフラ

はじめに

特定の曜日、時間帯だけ特定のトリガーが実行されないようにしたいという事を言われて、調べて見たら結構面倒くさかったのでメモです。

環境

  • Zabbix server v2.0.8 (revision 38017) (21 August 2013)

要件

  • 以下の監視条件を満たしたい
    1. 日曜の2:00~6:00まで特定のトリガーの監視を抑制
    2. 日曜以外の2:00~4:00まで特定のトリガーの監視を抑制

実現するには

使う関数

Zabbixに用意されている以下の関数を使用

  • dayofweek
  • time

条件式

元の条件式

{Template_name:proc.num[pop3d,,sleep].count(#2,0,eq)}=2

日曜の2:00~6:00まで特定のトリガーの監視を抑制する条件式

(({Template_name:proc.num[pop3d,,sleep].dayofweek(0)}=7) and
({Tmplate_name:proc.num[pop3d,,sleep].time(0)}>020000 and
{Tmplate_name:proc.num[pop3d,,sleep].time(0)}<060000)=0)

日曜以外の2:00~4:00まで特定のトリガーの監視を抑制する条件式

(({Template_name:proc.num[pop3d,,sleep].dayofweek(0)}<7) and
({Tmplate_name:proc.num[pop3d,,sleep].time(0)}>020000 and
{Tmplate_name:proc.num[pop3d,,sleep].time(0)}<040000)=0)

最終的な条件式

{Template_name:proc.num[pop3d,,sleep].count(#2,0,eq)}=2 and

((({Template_name:proc.num[pop3d,,sleep].dayofweek(0)}=7) and
({Tmplate_name:proc.num[pop3d,,sleep].time(0)}>020000 and
{Tmplate_name:proc.num[pop3d,,sleep].time(0)}<060000)=0) or

(({Template_name:proc.num[pop3d,,sleep].dayofweek(0)}=7) and
({Tmplate_name:proc.num[pop3d,,sleep].time(0)}>020000 and
{Tmplate_name:proc.num[pop3d,,sleep].time(0)}<040000)=0))

おわりに

このぐらいの複雑度になるとZabbixで条件式書くのが辛くなってきますね・・・(^_^;)

参考

トリガーの曜日・時間指定での検知除外設定 | ZABBIX-JP

dev.blog.fairway.ne.jp

qiita.com