動かざることバグの如し

殿、温めておいたバグがこちらでございます

pyenv環境でgcloudをインストールする

環境

  • Mac
  • Pyenv + anaconda3

gcloudがpython3に対応してない問題

pyenvをわざわざ使っている人の99%はデフォルトのPythonのバージョンは3.xだと思う(anaconda含め)

が、残念なことにgcloudコマンドはpython2.xにしか対応していない。結果、pyenvでpython3を指定していると、gcloudのインストールにはうまくいくかもしれないが、実行にコケる。

解決策

明示的にPythonのパスをしてあげる

まずpyenvでpython2をインストール

pyenv install 2.7.12

次に~/.bash_profileに以下を追記 ユーザー名は各々書き換えて

export CLOUDSDK_PYTHON=/Users/thr3a/.pyenv/versions/2.7.12/bin/python

でもってダウンロードしたinstall_google_cloud_sdk.bashを実行する

おk

バンドリを支えるインフラ構成

結構前になってしまうが、株式会社サムザップ主催のインフラ勉強会に参加した。

sumzaptechnight.connpass.com

そこで某神ゲーバンドリの生みの親こと、株式会社Craft Eggのインフラ担当者が発表していたのでメモ。

発表者 is 誰

山村英貴氏。親会社のサイバーエージェントからの移動?的な

株式会社Craft Egg 山村英貴(yamamura hideki)
京都大学工学部卒業。2013年サイバーエージェント新卒入社。 サーバーサイドエンジニアとして画像配信、広告配信、リアルタイム通信基盤、チャット基盤、アセットバンドル配信基盤などを担当、現在は「バンドリ! ガールズバンドパーティ!」でサーバーとインフラを担当。

サーバー構成

インフラは主にAWSで運用してる

  • ユーザーDBは16台構成
    • r3 2xlarge r3 8xlarge 16台
    • ユーザーIDの剰余でDBを分割
  • 現在over 8000 req/s

リリース前はDB1台で捌く予定だったらしく(やばすぎ)、負荷試験かけると1200req/sで一瞬でCPUが100%になる症状が発生していた

そこで、ユーザーに紐付かない情報は共通DBに残しつつ、ユーザーに紐づくデータは分割することで負荷を分散させた

その他のよもやま話

  • Aurora MySQLの互換性は問題なし
  • Aurora MySQLはレイテンシが安定している 読み書き両方
  • ただしテーブルスキャン速度は普通(テーブルを全文舐めるようなクエリは普通の速度
  • スナップショット機能、データ巻き戻し機能はとても便利

他に使ったサービス

  • Athena ログ解析に使用
  • CloudFront
  • Route53
  • S3
  • Kinesis Firehose

ここまで話してくださって本当にありがとうございました。

Ubuntu/CentOSでSassCをインストールする

SassCとは

sassのC++実装版

実行速度がめちゃくちゃ速い めちゃくちゃ速い

環境

  • Ubuntu 16.04
  • CentOS 6
  • ただしデフォルトのgccのバージョンが古いので新しくする必要があるので以下のURLを参考

thr3a.hatenablog.com

インストール方法

公式ドキュメントを参考にビルドしていく

適当なディレクトリで git clone

git clone https://github.com/sass/sassc.git

cdでそのディレクトリに行かずにそのまま実行

. sassc/script/bootstrap

ビルド jの値はCPUのコア数なのでお好みに(環境によってはgmakeかも知れない)

make -C sassc -j4

make後に./sassc/bin/sassc -hで正しくヘルプが表示されれば成功

make instrall これで/usr/local/binにインストールされる

PREFIX="/usr/local" make -C sassc install

確認

$ sassc --version
sassc: 3.4.8
libsass: 3.5.0
sass2scss: 1.1.1
sass: 3.5

やったー

CentOS6にRuby 2.5.0をインストールをしたい人生だった

結論

なんとかできる

ビルドできない問題

Ruby 2.5.0がリリースされて、早速ruby 2.5.0をインストールしようとしたが、

rbenv install 2.5.0

エラーになる。どうもビルドでコケるっぽい。

prelude.c: In function ‘prelude_eval’:
prelude.c:204: error: #pragma GCC diagnostic not allowed inside functions
prelude.c:205: error: #pragma GCC diagnostic not allowed inside functions
prelude.c:221: error: #pragma GCC diagnostic not allowed inside functions
トップレベル:
cc1: 警告: unrecognized command line option "-Wno-self-assign"
cc1: 警告: unrecognized command line option "-Wno-constant-logical-operand"
cc1: 警告: unrecognized command line option "-Wno-parentheses-equality"
cc1: 警告: unrecognized command line option "-Wno-tautological-compare"
make: *** [prelude.o] エラー 1

どうもCentOS6に入ってるgccのバージョンがとても古く、そのままではビルドできないとのこと。

Rubyのコアチームもすでにこの問題を認識している。

Bug #14234: Failed to build on CentOS 6.9 - Ruby trunk - Ruby Issue Tracking System

が、実際の対応はRuby 2.5.1以降のリリースになるらしい。そんなバカな。。。。

解決策

と嘆いていたが、どうも gccのバージョンを新しくすればCentOS6でもRuby2.5.0のインストールは成功するらしい。

以下の記事を参考にgccをアップデートする。

thr3a.hatenablog.com

$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]

やったぜ

参考リンク

CentOS6のgccをアップデートする

CentOS6ではyum経由でインストールできるgccのバージョンがとても古い。(強調

# gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-17)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

これだとruby2.5のビルドができない!が、Developer Toolsetというのをインストールすると新しめのgccがインストールできるとのこと

環境

インストール

順番にyum installしていく

# yum install centos-release-scl
# yum install scl-utils
# yum install devtoolset-4-gcc devtoolset-4-gcc-c++ devtoolset-4-binutils

↑はインストールするパッケージをビルドによく使うものだけに絞っている。全部くれって場合はyum install devtoolset-4すればおk

有効化

パッケージをインストールするだけではダメで、明示的にこのgccを使います!ってコマンドを叩かなくてはいけない。

# scl enable devtoolset-4 bash

すると新しくなってる

# gcc --version
gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

常にインストールした新しいgccを使ってビルドさせろって場合は/etc/profile.d/に適当なスクリプトを作ると吉

$ cat /etc/profile.d/enabledevtoolset-4.sh
#!/bin/bash
source scl_source enable devtoolset-4