Hatena::ブログ(Diary)

bose999の試験管の中の話 このページをアンテナに追加 RSSフィード Twitter

bose999が所属するネットパイロティング株式会社ではSaaS開発・インフラエンジニアを
募集中です! 一緒にBtoBサービスを生み出して行きませんか?


また学生のインフラエンジニアのアルバイトも募集しています。
BtoBサービスを行なっている会社でアルバイトをしてみて
システム系の仕事の現場を経験してみませんか?

2015-01-05

そろそろCentOS7をさわっていくか systemctlコマンドを確認していく

typeでの一覧表示。下記はserviceでのコマンド例。

ACTIVE欄がfailedになっている場合は本来有効化される設定のUnitが動いてない場合。

[root@localhost ~]# systemctl --type=service
UNIT                                                                 LOAD   ACTIVE SUB     DESCRIPTION
auditd.service                                                       loaded active running Security Auditing Service
avahi-daemon.service                                                 loaded active running Avahi mDNS/DNS-SD Stack
chronyd.service                                                      loaded active running NTP client/server
crond.service                                                        loaded active running Command Scheduler
(中略)
systemd-vconsole-setup.service                                       loaded active exited  Setup Virtual Console
tuned.service                                                        loaded active running Dynamic System Tuning Daemon

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

37 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

failedしたUnitを表示する

[root@localhost ~]# systemctl --failed
0 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

現在の状態関係なく定義されてるUnitを確認する。

grepと合わせて設定状態の個別確認にも使える。

STATEの詳細はenable 有効、disable 無効、static 自動起動設定を持たないもの

[root@localhost ~]# systemctl list-unit-files --type=service
UNIT FILE                                   STATE
arp-ethers.service                          disabled
auditd.service                              enabled
(中略)
systemd-user-sessions.service               static
systemd-vconsole-setup.service              static
teamd@.service                              static
tomcat.service                              disabled
tuned.service                               enabled
wpa_supplicant.service                      disabled

125 unit files listed.
[root@localhost ~]# systemctl list-unit-files --type=service | grep tomcat
tomcat.service                              disabled

Unitの有効・無効化を行うには

systemctl enable Unit名

systemctl disable Unit名

で行います。

systemctl is-enabled Unit名 で有効・無効化の状態を確認します。

下記はtomcatの状態を確認して有効化後、確認。

そして、また無効化して確認した例です。

[root@localhost ~]# systemctl is-enabled tomcat
disabled
[root@localhost ~]# systemctl enable tomcat
ln -s '/usr/lib/systemd/system/tomcat.service' '/etc/systemd/system/multi-user.target.wants/tomcat.service'
[root@localhost ~]# systemctl is-enabled tomcat
enabled
[root@localhost ~]# systemctl disable tomcat
rm '/etc/systemd/system/multi-user.target.wants/tomcat.service'
[root@localhost ~]# systemctl is-enabled tomcat
disabled

OS起動後にUnitを手動制御

systemctl start Unit名

systemctl restart Unit名

systemctl reload Unit名

systemctl stop Unit名

下記はtomcatをstart,stopした例

※設定ファイルに記述がない場合はコマンドは発行出来ません。

[root@localhost ~]# systemctl start tomcat
[root@localhost ~]# ps -ef | grep java
tomcat    2286     1 19 13:49 ?        00:00:01 java -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar -Dcatalina.base=/usr/share/tomcat -Dcatalina.home=/usr/share/tomcat -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat/temp -Djava.util.logging.config.file=/usr/share/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start
root      2306  2164  0 13:49 pts/0    00:00:00 grep --color=auto java
[root@localhost ~]# systemctl stop tomcat
[root@localhost ~]# ps -ef | grep java
root      2344  2164  0 13:49 pts/0    00:00:00 grep --color=auto java

systemdを再起動して追加や変更のあったUnitの設定を読み込み直す。

[root@localhost ~]# systemctl daemon-reload

2015-01-04

そろそろCentOS7をさわっていくか daemonの起動設定ファイルを見てみる

RHEL7/CentOS7では起動&サービス処理がsystemdに変更されてます。


設定ファイルがどのように記述されているのか?

というのをhttpdとtomcatの設定ファイルをもとに見てみます。


今までは/etc/init.dにある起動シェル

一つずつ処理してましたがsystemdはUnitという単位に

処理をまとめて可能な限り並列処理して起動を早くしています。


Unitのタイプは複数ありますがdaemonの起動に利用するのは

serviceというタイプになります。


Unitの設定ファイルはシステムのデフォルトの設定が

/usr/lib/systemd/system

に配置され

/etc/systemd/system

にユーザが追加・修正したものを配置するようになってます。


両方に同じ名前のファイルがある場合は/etc/systemd/systemに

あるものを優先させます。デフォルトからいじる場合は

/usr/lib/systemd/system から /etc/systemd/system に

コピーして更新するイメージです。


UnitはUnit間に関係を持っているもの以外は同時に処理します。

関係性を設定ファイルに記述して起動の順番を制御します。


CentOS7でyumインストールされるtomcatとhttpdの

設定ファイルを見てみます。


[root@localhost system]# cat /usr/lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target

[root@localhost system]# cat /usr/lib/systemd/system/tomcat.service
# Systemd unit file for tomcat
#
# To create clones of this service:
# 1) By default SERVICE_NAME=tomcat. When cloned, the value must be defined
# before tomcat-sysd is called.
# 2) Create /etc/sysconfig/${SERVICE_NAME} from /etc/sysconfig/tomcat
# to override tomcat defaults

[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/usr/sbin/tomcat-sysd start
ExecStop=/usr/sbin/tomcat-sysd stop
SuccessExitStatus=143
User=tomcat
Group=tomcat


[Install]
WantedBy=multi-user.target


・起動順番の制御

[Install]のWantedByのmulti-user.targetはrun level 3で

起動されます。この起動を前提に起動するという

依存関係の設定となります。


daemonを設定するという用途ならたいていは

run level 3と5がどれに該当するかを意識すればOKです。


そこの設定は設定ファイルの[Install]項に

WantedBy=xxxx

という用に記述をします。


run level3が

WantedBy=multi-user.target


run level 5が

WantedBy=graphical.target

になります。


次に[Unit]のAfterで更に細かく制御します。

設定ファイルを記述しているサービスが起動する前に起動するべき

Unitを記述して起動順番をきめる項目になります。


この2つの項目の設定で適切なrun leverlで起動し、

このサービスの起動前に起動しておくべきサービスの後に

設定ファイルのサービスが起動するという起動の順番の制御が

設定されています。


・サービスの起動と停止の制御

[Service]の中に記述します。ExecStart はサービスの起動コマンドです。

ExecReload はtomcatにはありませんがhttpd等には存在して

gracefulでReloadさせたりします。ExecStop はサービスの停止コマンドです。


・サービスのExecStart後の状態

[Service]の中にTypeを記述します。

forkingは起動プログラムは終了するものを指しています。

他にsimpleやoneshot等が存在します。


・その他

UserとGroupがtomcatの設定ファイルには記述されていますが

httpdには記述されておらずhttp.confの中のものを使います。

PrivateTmpはセキュリティの為に専用のtmp領域を使うという設定。

この他にサービスプロセス停止時の再起動条件を決定するRestart等の

パラメータがあります。


設定ファイルを見ていきましたが、このようにだいぶRHEL6系からみると

変更されていますね。次は制御系のコマンドをまとめたいと思ってます。

2015-01-03

2015年やってくこと

日々、技術も進化してくのでもっと違う事してくかもしれないけど、

年明けて思ってる事を書きます。


昨年のチャレンジ

Hadoopを自社サービスでサービス用のデータを作るために本格利用

・Riakを本番サービスでストレージとして利用

・Spring Batchの本格活用

日立製作所と一緒にDCにおけるハードウェア監視を実現。

 (障害時は日立製作所と我々が検知。すぐに修理等の対応が始まる。)

・自社製DispatchサーバAPサーバの作成を行いよりスケールするインフラの確立

 (Nginx - Dispatch - AP - アプリ - DataStore)

・自社フレームワークの制作と使用(Java独自APサーバ用 good bye JavaEE

・Zabbixだけでなくfluentd等を利用してより高度な監視の実現


※この辺の話は一部下記に載ってます。

[かんたんHadoopソリューション 導入事例] クーポンサービスの強化にHadoopを導入 “勘”を排除した最適なレコメンドを実現:ビッグデータ:日立

ニュースリリース|株式会社ユニックス


では今年は何を行っていくか?

・RHEL7系の本番サービスでの使用開始

MariaDBの更なる活用

ハードウェア仮想化(日立LPAR)からソフトウェア仮想化に完全移行開始

・Riakの更なる活用

・Go言語の更なる活用

・リリース作業の自動化を更にすすめる

・数年社内に篭って作業に専念してましたが

  勉強会コミュニティに参加をまたしていく

  技術的な事をブログに書く


という事で考えてます。

そろそろCentOS7さわっていくか え!? ifconfig あれ他のもない

net-toolsがデフォルトで入らなくなります。

[root@localhost ~]# ifconfig
-bash: ifconfig: コマンドが見つかりません
[root@localhost ~]# route
-bash: route: コマンドが見つかりません
[root@localhost ~]# netstat
-bash: netstat: コマンドが見つかりません
[root@localhost ~]# arp
-bash: arp: コマンドが見つかりません

じゃ、次世代の使えばいいじゃない。

と思うじゃん?


新しいものにバグがあったりするんだなこれが。

という事で気をつけて移行していきましょう。


現在のネットワークの設定状態を確認するには

ifconfig -a => ip a show を打つように変更してきます。

[root@localhost ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:1c:42:00:50:ae brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.76/24 brd 192.168.10.255 scope global dynamic eth0
       valid_lft 83719sec preferred_lft 83719sec
    inet6 fe80::21c:42ff:fe00:50ae/64 scope link
       valid_lft forever preferred_lft forever
[root@localhost ~]# ip a show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:1c:42:00:50:ae brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.76/24 brd 192.168.10.255 scope global dynamic eth0
       valid_lft 83713sec preferred_lft 83713sec
    inet6 fe80::21c:42ff:fe00:50ae/64 scope link
       valid_lft forever preferred_lft forever

route => ip route を打つように変更してきます。

[root@localhost ~]# ip route
default via 192.168.10.1 dev eth0  proto static  metric 1024
[root@localhost ~]# ip route add 192.168.111.0/24 via 192.168.10.251 dev eth0
[root@localhost ~]# ip route
default via 192.168.10.1 dev eth0  proto static  metric 1024
192.168.111.0/24 via 192.168.10.251 dev eth0
[root@localhost ~]# ip route del 192.168.111.0/24 via 192.168.10.251 dev eth0
[root@localhost ~]# ip route
default via 192.168.10.1 dev eth0  proto static  metric 1024

netstatからssコマンド等に移行しようってなるんですが、

実は罠です。ありますがバグがあるようなので

netstatコマンドを使うようにした方がいいかもしれません。

という事でバージョンだけ確認。

[root@localhost ~]# ss --version
ss utility, iproute2-ss130716

apr -n => ip n show を打つようにします。

[root@localhost ~]# ip neigh show
fe80::1 dev eth0 lladdr a4:c7:de:6f:e0:f0 router STALE
192.168.10.86 dev eth0 lladdr 60:03:08:99:aa:6e REACHABLE
192.168.10.1 dev eth0 lladdr a4:c7:de:6f:e0:f0 STALE
[root@localhost ~]# ip n show
fe80::1 dev eth0 lladdr a4:c7:de:6f:e0:f0 router STALE
192.168.10.86 dev eth0 lladdr 60:03:08:99:aa:6e REACHABLE
192.168.10.1 dev eth0 lladdr a4:c7:de:6f:e0:f0 STALE

という事でnetstat以外は新しいコマンドに慣れていくようにしましょう。

2015-01-02

UTF8メール送信ライブラリを作って go get 出来るようにしてみた

純正のAPIのnet/smtpASCIIのメールを送るには問題ないのですが

日本語のメールを送る際に困るのでUTF8形式で

日本語メールを送れるライブラリを作ってみました。


今回テストはgospelを使って書いてみました。

Go言語の理解がまだまだなのでもっと良く出来る部分はあるかと思います。


bose999/GoSendMail ? GitHub

Githubに置いてあります。


下記のような感じでUTF8で日本語メール等が送れます。

// smtpServer info : IP Address, port, userName, Password
smtpServer := gosendmail.NewSmtpSever("xxx.xxx.xxx.xxx", 25, "yyy", "zzz")

// sendmail info : from address, to address, cc address, subject, body
sendMail := gosendmail.NewSendMail("abc@xxx.xxx", []string{"abc@xxx.xxx"},
  []string{"xyz@gxxx.xxx"}, "UTF8のSubject", "UTF8の本文")

// send smtp mail
err := gosendmail.SendSmtp(smtpServer, sendMail)
if err != nil {
    log.Fatal(err)
     os.Exit(1)
}

Githubにおけば

% go get github.com/bose999/gosendmail

これでネットワークが繋がってればライブラリ

GOPATH配下に引き取れます。便利ですね!


このライブラリも業務で使おうかなと思って作ったものなので

必要があれば更新したり別のものも作ったりとしていこうと思います。

grepの一部機能をGo言語で実装してみた

サービスの運用業務でgrepコマンドはよく使うのですが、

前回実行してから行数が増えたので差分だけgrepしたい

という要件とかもあります。


gogrep "検索文字列" "検索ファイル"

gogrep "検索文字列" "検索ファイル" "検索開始行"

という機能だけとりあえず実装してました。


bose999/GoGrep ? GitHub

上記に置いてあります。


という事で開発したMac Book Pro Retina 15

(Marvericks/Corei7/Mem 16GB/SSD 512GB)上で

OSgrepとgoGrepの性能をざっとくらべてみます。


まず検索対象のテキストファイルを1GBくらいで生成

% cat makeRandomText.sh
#!/bin/bash
for i in `seq 1 1048576`
do
  pwgen -0A 1024 1 >> /Users/matakeda/Documents/a.txt
done
% ls -lah /Users/matakeda/Documents/a.txt
-rw-r--r--  1 matakeda  staff   1.0G 12 29 18:15 /Users/matakeda/Documents/a.txt

次に実行した時間を秒で表示して処理結果をdiffするシェルを3回実行

% cat grep-time.sh
#!/bin/bash
echo "GoGrep & Grep 実行"
GG_START=`date +'%s'`
/Users/matakeda/Documents/git/GoGrep/bin/gogrep "doshuc" /Users/matakeda/Documents/a.txt > ./gogrep.out
GG_END=`date +'%s'`

G_START=`date +'%s'`
/usr/bin/grep "doshuc" /Users/matakeda/Documents/a.txt > ./grep.out
G_END=`date +'%s'`

echo "GoGrep"
echo `expr $GG_END - $GG_START`
echo "grep"
echo `expr $G_END - $G_START`
echo "diff"
echo `diff ./gogrep.out ./grep.out`
echo "finish"
% ./grep-time.sh
GoGrep & Grep 実行
GoGrep
3
grep
14
diff

finish
% ./grep-time.sh
GoGrep & Grep 実行
GoGrep
3
grep
15
diff

finish
% ./grep-time.sh
GoGrep & Grep 実行
GoGrep
3
grep
15
diff

finish

grepが約14秒〜15秒、gogrepが約3秒という結果になりました。

ランダムアクセスとか使わないで先頭からのテキストファイルの

行ループを使って並列処理をガンガン書いたわけでも無いのに

思ってたよりも処理早いですね。。。w

これ業務で休み明け使いますわ。

そろそろCentOS7さわっていくか xfsの設定を変更してみる

という訳で本番環境でまだまだCentOS(RHEL7)は本番環境で使ってませんが

2015はCentOS7系を構築していくと思いますので理解を進めて行きたいと思います。


まず最小限の構成でインストール

ファイルシステムデフォルトのフォーマットがxfsになってます。

という訳でxfsをざっとチューニングしてみたのが下記。

UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX / xfs  noatime,nobarrier,logbsize=256k,logbufs=8,allocsize=2M,delaylog 1 1

nobarrier

ファイルシステムの安全性を高めるオプションをオフにして性能をあげる。

RAIDコントローラやディスクキャッシュが無効だったり、

ハードRAIDバッテリーバックアップcacheが守られているような

ストレージならこのオプションを入れて性能を取る。


logbsize

メモリ上のログバッファのサイズ。ioが多いシステムは256kが推奨。

大きくするとログの処理が高速になる。


logbufs

log buffer数を多くすると削除時のパフォーマンスが向上する。

2〜8が設定可能という事から8を選択。


allocsize

延滞書き込み時のバッファ I/O end-of-fileプリアロケーションサイズ。

デフォルトは64k。


delaylog

ログの延滞書き込みを有効にしてログを減らす。


上記の設定で試していって今後改善していってみます。

2014-12-31

MerveriksにGo言語をHomebrewでインストールしてみる

Homebrewインストール済みとします。


% brew install go
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/go-1.4.mavericks.bottle.tar.gz
######################################################################## 100.0%
==> Pouring go-1.4.mavericks.bottle.tar.gz
==> Caveats
As of go 1.2, a valid GOPATH is required to use the `go get` command:
  http://golang.org/doc/code.html#GOPATH

`go vet` and `go doc` are now part of the go.tools sub repo:
  http://golang.org/doc/go1.2#go_tools_godoc

To get `go vet` and `go doc` run:
  go get golang.org/x/tools/cmd/vet
  go get golang.org/x/tools/cmd/godoc

You may wish to add the GOROOT-based install location to your PATH:
  export PATH=$PATH:/usr/local/opt/go/libexec/bin
==> Summary
&#127866;  /usr/local/Cellar/go/1.4: 4557 files, 134M
% go version
go version go1.4 darwin/amd64

ここまででとりあえずGo言語の1.4が入りました。


次にシェル環境変数設定なのですがGOROOTを記述すると検索すると

たくさん出てきますが、これはGoのバージョンが1.0以前の話になります。

現在はGOPATHだけ設定すればOKです。


GOPATH配下にgo toolでいれたものが入るようになります。

自分の場合は下記のような.zshrcになってます。

# Go LANG
export GOPATH=/Users/matakeda/go

# $PATH
export PATH=$HOME/bin:`brew --prefix`/bin:$GOPATH/bin:$PATH

goclipseでGo言語のIDEによる開発環境を作ってみたいと思いますので

必要になるgodocとgocodeとoracle(DBではなく静的チェック)をいれます。

oracleMercurialがひつようなのでbrewで入れます。


% brew install hg
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/mercurial-3.2.3.mavericks.bottle.tar.gz
Already downloaded: /Library/Caches/Homebrew/mercurial-3.2.3.mavericks.bottle.tar.gz
==> Pouring mercurial-3.2.3.mavericks.bottle.tar.gz
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completion has been installed to:
  /usr/local/share/zsh/site-functions

Python modules have been installed and Homebrew's site-packages is not
in your Python sys.path, so you will not be able to import the modules
this formula installed. If you plan to develop with these modules,
please run:
  mkdir -p /Users/matakeda/Library/Python/2.7/lib/python/site-packages
  echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> /Users/matakeda/Library/Python/2.7/lib/python/site-packages/homebrew.pth
==> Summary
&#127866;  /usr/local/Cellar/mercurial/3.2.3: 364 files, 4.8M
% go get golang.org/x/tools/cmd/godoc
% go get github.com/nsf/gocode
% go get code.google.com/p/go.tools/cmd/oracle
% ls -lah /usr/local/opt/go/libexec/bin/godoc
-rwxr-xr-x  1 matakeda  staff    15M 12 31 05:05 /usr/local/opt/go/libexec/bin/godoc
% ls -lah $GOPATH/bin/gocode
-rwxr-xr-x  1 matakeda  staff   9.4M 12 31 05:05 /Users/matakeda/go/bin/gocode
% ls -lah $GOPATH/bin/oracle
-rwxr-xr-x  1 matakeda  staff   8.7M 12 31 05:35 /Users/matakeda/go/bin/oracle

何もなく終わりますがエラー等が出なければこれで入ってます。

goclipseでGo言語をIDEでコーディング出来るようにしてみる

Eclipse IDE for Java Developers にgoclipseを入れて開発環境を作ってみます。

eclipse-java-luna-SR1-macosx-cocoa-x86_64.tar.gz をダウンロードして

環境を作っていきます。


JDKは下記になります。

% java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)

Help -> Install New Software... と進みます。

Addで下記の情報を入れると

Name: goclipse

Location:http://goclipse.github.io/releases/

GoCilpseが選択できるようになるのでGoClipseだけを選択して入れます。


下記のように設定します。

f:id:bose999:20141231053954p:image

f:id:bose999:20141231053953p:image


上記のように設定ができたらGoProjectを作ってみて

実行してみましょう。下記のように実行できたら

デバッグ環境以外はgoclipseの設定ができてるかと思います。

デバック環境構築については別の記事にまとめます。

f:id:bose999:20141231054105p:image

goclipseでGo言語をデバッグできるようにしてみる

まずgdbを入れます。


% brew install homebrew/dupes/gdb
Cloning into '/usr/local/Library/Taps/homebrew/homebrew-dupes'...
remote: Counting objects: 1498, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 1498 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (1498/1498), 299.62 KiB | 191.00 KiB/s, done.
Resolving deltas: 100% (823/823), done.
Checking connectivity... done.
Tapped 36 formulae
==> Installing gdb from homebrew/homebrew-dupes
==> Installing dependencies for gdb: xz, readline
==> Installing gdb dependency: xz
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/xz-5.0.7.mavericks.bottle.tar.gz
######################################################################## 100.0%
==> Pouring xz-5.0.7.mavericks.bottle.tar.gz
&#127866;  /usr/local/Cellar/xz/5.0.7: 58 files, 1.5M
==> Installing gdb dependency: readline
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/readline-6.3.8.mavericks.bottle.tar.gz
######################################################################## 100.0%
==> Pouring readline-6.3.8.mavericks.bottle.tar.gz
==> Caveats
This formula is keg-only, which means it was not symlinked into /usr/local.

Mac OS X provides similar software, and installing this software in
parallel can cause all kinds of trouble.

OS X provides the BSD libedit library, which shadows libreadline.
In order to prevent conflicts when programs look for libreadline we are
defaulting this GNU Readline installation to keg-only.

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/readline/lib
    CPPFLAGS: -I/usr/local/opt/readline/include

==> Summary
&#127866;  /usr/local/Cellar/readline/6.3.8: 40 files, 2.1M
==> Installing gdb
==> Downloading http://ftpmirror.gnu.org/gdb/gdb-7.8.1.tar.xz
######################################################################## 100.0%
==> Patching
patching file gdb/darwin-nat.c
==> ./configure --prefix=/usr/local/Cellar/gdb/7.8.1 --with-system-readline --with-lzma --with-python=/usr
==> make
==> make install
==> Caveats
gdb requires special privileges to access Mach ports.
You will need to codesign the binary. For instructions, see:

  http://sourceware.org/gdb/wiki/BuildingOnDarwin
==> Summary
&#127866;  /usr/local/Cellar/gdb/7.8.1: 42 files, 5.7M, built in 11.1 minutes

これだけでは動かないので下記のページを参考に証明書処理の

手順1〜7を実行します。8はVerが違っちゃっていたので

※有効期間はめんどいので3650日にしてみました。

Safx: MacでGoのデバッグ環境を構築する


証明書の残りの処理をします。

% codesign -s gdb-cert /usr/local/Cellar/gdb/7.8.1/bin/gdb
% sudo killall taskgated
Password:

次に設定を変更します。

% sudo vi /System/Library/LaunchDaemons/com.apple.taskgated.plist
Password:

※<string>-s</string> -> <string>-sp</string>が変更点です。


Eclipse側にGDBを設定するとデバッグが可能になります。

f:id:bose999:20141231090845p:image