気ままなつぶやき

おべんきょしたこととか

Hubotと戯れる

Hubotインストール

$yum install npm
$yum install nodejs

バージョンはこんな感じ

$node --version
v0.10.28
$npm --version
2.5.0

で、必要なモジュールとか入れる

#npm install coffee-script hubot -g 
#npm install -g yo generator-hubot

で、このままhubot動かそうとするとやたら権限まわりで怒られる。

良く見ると npmでグローバルインストールすると`/usr/lib/node_modules`配下にインストールされてくるんだけど、なんか権限が軒並みこんな感じになってた。 nobody....

ll /usr/lib/node_modules/ | grep hubot
drwxr-xr-x 9 nobody cy_admin 4096  213 18:46 2015 hubot

yumでインストールしたやつは軒並みrootになっているんだけど。。
とりあえず、あとでインストールしたものは、`chown -R root. hubot`みたいに権限を合わせました。

このままでも権限のエラーがでるんだけど、どうやら、実行ユーザのホームディレクトリ配下に `.npm`ディレクトリがあって色々キャッシュしている様子。
この中できっと権限がごちゃごちゃしちゃってるのであろう。。。てことで削除したらひとまず準備完了

hubot起動など

$mkdir chako
$cd chako
$ yo hubot

テスト

$cd chako
$./bin/hubot

Hubot> hubot ping
PONG

hipchatと連携

$cd chako
$npm install hubot-hipchat

これみて設定いれただけ。
hipchat/hubot-hipchat · GitHub

#!/bin/sh

set -e

npm install
export PATH="node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH"
export HUBOT_NAME="chako"
export PORT=80

#see https://github.com/hipchat/hubot-hipchat

export HUBOT_ADAPTER="hipchat"
export HUBOT_HIPCHAT_JID="hogehoge@chat.hipchat.com"
export HUBOT_HIPCHAT_PASSWORD="hogepassword"

#optional
export HUBOT_HIPCHAT_ROOMS="hogeroom@chat.hipchat.com,hoge2room@chat.hipchat.com"
#export HUBOT_HIPCHAT_ROOMS_BLACKLIST=""
#export HUBOT_HIPCHAT_JOIN_ROOMS_ON_INVITE=""
#export HUBOT_HIPCHAT_HOST="cyberagent.hipchat.com"
#export HUBOT_HIPCHAT_XMPP_DOMAIN=""
#export HUBOT_LOG_LEVEL="debug"
#export HUBOT_HIPCHAT_RECONNECT=""

exec node_modules/.bin/hubot "$@"

optionalで色々指定できるみたいだけど、特に何も指定していない。
hubot-hipchatは、hipchatに5222ポートで通信しにいくのでサーバからポート空いてるのを確認してれば問題ない

f:id:pnsk:20150308191012p:plain

hubotのスクリプトを使ってみる

github/hubot-scripts · GitHub

カタログがいくつかあるので、楽しそうなのを追加する
Hubot Script Catalog

hubot-scripts.json
に追加すれば良いらしい

ちょっとやってみた

["room-info.coffee","flip.coffee"]

room-infoの方はこんな感じ
hubot-scripts/room-info.coffee at master · github/hubot-scripts · GitHub

f:id:pnsk:20150308194730p:plain
※chako_testというhipchatのroomでやってる


flipの方はこんな感じ
hubot-scripts/flip.coffee at master · github/hubot-scripts · GitHub

f:id:pnsk:20150308194753p:plain

※flipをnpm installした

hubotのスクリプトを書いてみた

GHEのライセンスの利用状況ができるものと、サイズの大きなリポジトリランキング(2GB以上のもの)を表示するスクリプトを書いた。

使ったAPIはこれ
Enterprise | GitHub API
Search | GitHub API

ライセンスのAPIはGHEの2.1から利用できるものらしい


hubot-script/ghe-status.coffee at master · pnsk/hubot-script · GitHub

でたでた
f:id:pnsk:20150310135457p:plain

なんかもっとちゃんと書けそうだけど・・・。いったん。。

ちゃんちゃん。

【maven】帰ってきたnexusの設定いろいろ

アカウントの設定

Security > LDAP Configurationで設定する

LDAP認証

ユーザはLDAPアカウントでログインできるようにする。
LDAPのログイン条件は、こんな感じ

$ldapsearch -x -h xxx.xxx.xxx.xxx "(&(uid=*)(description=maven))"

LDAPアカウントを持っていればOKではなくて、descriptionでフィルタをかけている

LDAP Configuration

「Connection」項目でLDAPサーバの設定をする。
f:id:pnsk:20150210190339p:plain

「Check Authentication」ボタンでConnectionの確認
f:id:pnsk:20150210190425p:plain

ユーザとグループのマッピング

設定内容はこんなかんじ
f:id:pnsk:20150210190655p:plain

User Element Mapping

ここでは、LDAPデータからNexusのユーザ情報をマッピングして登録するのと、ログインするときのフィルターの設定をしている

ldapsearchコマンドで返却された項目から、必要なものを紐づければいい。
今回はNexus上のユーザIDを、LDAPのuid項目に当てはめたかったのでそう設定している。

今回は、description=mavenのフィルターを付けている。

Group Element Mapping

Group側の設定では、今回LDAPのfilterでグループを作っておく。
このGroupの設定で、あとでrole(権限)を付けるために作成しているけれど、roleをグループで管理したくない場合は、Groupの設定はしなくて問題ない

※ここでdescriptionっていうグループがあるわけではなくて、LDAP上のdescription項目でグループ作るよって決めただけ。


「Check User Mapping」ボタンをクリックして、対象のユーザが表示されれば、設定は正しい。

f:id:pnsk:20150210191647p:plain

LDAPアカウントでログイン

上記のLDAPマッピング設定をしただけだとLDAPアカウントでログインはできない。

Administration > Serverの「Security Settings」で「OSS LDAP Authentication Realm」をSeleceted Realmsの方に移動してやる必要がある
f:id:pnsk:20150210192130p:plain

個別アカウントの設定

CIツール経由でmvn deployする場合等を想定して、ユーザアカウントとは別でアカウントを作成する

Security>Usersから
f:id:pnsk:20150216123733p:plain

「Nexus User」を選択してアカウントを作成する。

roleの制御

さてはて。作成したユーザに権限(role)を設定する
Security>Rolesから、権限の指定をできる

結構細かく権限の付与をすることができる

roleのカスタマイズ

「Nexus Role」を選択
f:id:pnsk:20150225021138p:plain

「Add」から好きなのを組み合わせる。
f:id:pnsk:20150225021211p:plain
今回は、deployの権限と、artifact uploadを組み合わせた権限を作ったお

LDAPで紐づけたアカウント群にroleを付与

「External Role Mapping」を選択する
f:id:pnsk:20150225015628p:plain

LDAPで設定されているdescriptionたちが沢山出てくる(なんか色々あれなので一部モザイク・・)
f:id:pnsk:20150225015822p:plain

これはユーザ作成時にGroupMappingでdescriptionを指定したから、出てくる。

今回はmavenを選択して、descriptionがmaven(本当はhogehoge.mavenだけど)に該当するユーザに権限を付けていく
f:id:pnsk:20150225020652p:plain

最初はこんな感じで作成されるから「add」を選択して、権限つけて「save」すれば完成
f:id:pnsk:20150225020859p:plain

今回はあらかじめ作成しておいた、カスタマイズしたroleを追加した。

jvmの設定変更

wrapper.confで変更できるよ。

${NEXUS_HOME}/nexus/bin/jsw/conf/wrapper.conf

ポートの変更

nexus.propertiesで変更できる。

${NEXUS_HOME}/nexus/conf/nexus.properties

でも80とかにはできないお。nexusさんjetty使ってるので。

リポジトリの設定

リポジトリは大枠で3つ管理するイメージ

  1. nexusに直接あげた内部ライブラリ
  2. 3rdpartyのライブラリ単体
  3. 外部mavenリポジトリ

nexusに直接あげた内部ライブラリ

標準で用意されている「Releases」と「Snapshot」を利用する。
nexusにログインして直接アップロードしても良いし、pom.xmlに設定してアップロードしても良い。
アップロードは、ユーザにアップロード用のroleが設定されている必要がある

3rdpartyのライブラリ単体

標準で用意されている「3rdparty」を利用する。
但し、なるべくライブラリ単体ではなくて、リポジトリが存在するならそれを指定すべき。

外部mavenリポジトリの登録

外部のmavenリポジトリは、proxyリポジトリとして登録する

例えば、Springframeworkのmavenリポジトリを登録する場合

http://maven.springframework.org/release/

Views/Repositories>Repositoriesから

f:id:pnsk:20150217152952p:plain

設定内容
f:id:pnsk:20150217153039p:plain

Repository Policyは登録するリポジトリに合わせる(snapshotとか)

トラブルシューティング

データ上存在するのに検索にでてこない

データ移行してきたときによくある。

springframeworkのmavenリポジトリを例にとる

こんな感じに、データ上は存在する
f:id:pnsk:20150223154553p:plain

でもインデックスでは存在しない(勿論、検索にも引っかかってこない;;)
f:id:pnsk:20150223154626p:plain

そんなときは、リポジトリを選択して「右クリック」!!!

「Repair Index」で元通りやで
f:id:pnsk:20150223154703p:plain

【maven】帰ってきたnexusのインストール 

すごく昔に、nexusを構築したんだけど、最近また構築しなきゃいけなくなったー


ReleaseNote

Sonatype Nexus Release Notes Index : Sonatype Support

2.11.1にしよう。

何気に、最終更新日が2014/12/19だし。
Sonatype Nexus 2.11.1 Release Notes : Sonatype Support

ダウンロード

Pro版もあるけど、OSS版を入れます

Download and Install Nexus OSS | TheNEXUS
ブラウザ上でダウンロードして、scpした。

今回は/data/nexus配下にnexusを入れる

$ cd /data
$ mkdir nexus

ローカルに落としてきたnexusを移動して展開

$mv nexus-2.11.1-01-bundle.tar.gz /usr/local/src/
$cd /usr/local/src/
$tar -xzvf nexus-2.11.1-01-bundle.tar.gz -C /data/nexus/
#確認
$cd /data/nexus/
$ls
nexus-2.11.1-01  sonatype-work

2つディレクトリができた
nexusディレクトリは,nexus自体のアプリケーション,sonatype-workディレクトリは,リポジトリに関連する情報が入っている.
nexusのバージョンをあげる場合はnexusディレクトリのみ更新すれば問題なく動作する(たぶん).

バージョンまた変わったときに便利なように、シンボリックリンク貼っておく

$ln -s nexus-2.11.1-01 nexus
$ll | grep nexus
lrwxrwxrwx 1 root root   15  16 17:51 2015 nexus -> nexus-2.11.1-01
drwxr-xr-x 8 root root 4096 1217 10:23 2014 nexus-2.11.1-01

nexus用のユーザ作成

えいっ

$groupadd cy_nexus
$ useradd cy_nexus -g cy_nexus
#確認
$id cy_nexus
uid=10001(cy_nexus) gid=10001(cy_nexus) 所属グループ=10001(cy_nexus)

やあっ

$ll /data | grep nexus
drwxr-xr-x 4 root root  4096  16 17:51 2015 nexus
$chown -R cy_nexus. nexus
$ll /data | grep nexus
drwxr-xr-x 4 cy_nexus cy_nexus  4096  16 17:51 2015 nexus

起動

さてはて。

Sonatype Nexus 2.0 through 2.8.1 Release Notes : Sonatype Support
なんか2.7のところで、2.0からOS毎のスクリプトはdeprecatedしてたけど削除したよって書いてる
(あるけど)

Legacy Startup Scripts Removed
The old startup scripts (located under $NEXUS_HOME/bin/jsw/$ARCH in the installation directory) have finally been removed. These have been deprecated since Nexus 2.0. Users should use the new startup scripts introduced in Nexus 2.0, located in $NEXUS_HOME/bin (NEXUS-5781). The 'clickable' Windows batch files (*-nexus.bat) have remained, but the only use case for these are to be 'clicked' to perform a specific named action.


nexusさんオススメのやり方でやろう。

ちょっと実行してみる

$/data/nexus/nexus/bin/nexus
Usage: /data/nexus/nexus/bin/nexus { console | start | stop | restart | status | dump }

ほほ。

起動スクリプト

以前作ったやつの引用(冒頭)

$vi /etc/init.d/nexus 

中身はこんな感じ

#!/bin/sh
# description: nexus start/stop Script

# 実行ユーザの指定
export RUN_AS_USER=cy_nexus

# user check
if [ `/usr/bin/whoami` != "root" ];
then
    echo "This script is only for root."
    exit 1
fi

NEXUS_HOME=/data/nexus/nexus
#nexusの起動
${NEXUS_HOME}/bin/nexus $@
exit 0

実行権限付与

$ chmod +x  /etc/init.d/nexus 
$ ll /etc/init.d/nexus 
-rwxr-xr-x 1 root root 295  16 19:09 2015 /etc/init.d/nexus

よし。実行

$/etc/init.d/nexus start
Starting Nexus OSS...
Started Nexus OSS.

http://xxx.xxx.xxx.xxx:8081/nexus/#welcome

立ち上がった
f:id:pnsk:20150106183657p:plain

admin/admin123
でログインできる

ちなみに

jdk入ってるか確認

jdk入れ忘れてると、起動時に落ちる

すでに起動してるとき

nexusさんが怒ってくれる

/etc/init.d/nexus start
Starting Nexus OSS...
Nexus OSS is already running.

2014年の振り返り



さてはて。

2014年は、相変わらず、開発環境まわりをまわりをせっせこやっていた

いくつか何かを導入したけど、革新的な事はなく、地道に整備している感じ。

それも凄く大事なことだけど。

去年からずーっと、組織として弱さを感じていた


人員確保大変だし、
てか人は減る一方だった。

ほんと、大変だった。

やりたいことと、毎日に追われることと、悔しいのと、疲れるのと、ジワジワと辛かったかもしれない

たくさんぐちぐち言ってたと思うけど、同じくらいやれる事はやろうと思って行動したつもり。

もう、色々な事がジリ貧だったので、ぶっちゃけ、失うものなど無いという状況だった。

これやってbanされるなら、こっちこそ願い下げだ!というジャイアン根性むき出しな一年間

自分はサーバサイドエンジニアだけど、枠にとらわれてたら、負けちゃうから、

インフラよりの事だってやったし、プログラムも書いたし、ポスターの発注もやったw

しっかりやることやってれば大丈夫!!
なんていうことはないと思った一年

結果はアピールしていかなきゃ、状況は変わらない

そう思って行動してきた一年間でした

エンジニアブログ書いたし、社外勉強会で発表とかやってみたり、役員の人がやるワーキンググループのメンバーに立候補してみたり…

と、今までは自分から進んでやらなかったことをやってみたり

社内でダメなら社外から攻めようとか企んだり

結果として2014年、大きなアウトプットを出せたかは微妙だったけど

表面的に評価される事が後半多くなったので、たくさんアピールできた年だったんだと思う

この評価まで、時間かかったなぁ…と。

この一年間で少しでも増えた評価を、
2015年に使って、しっかりと結果につなげていこうと思う

【apache】インストールめも

作業めも(ΦωΦ)♪

とある検証環境を急遽たてなきゃいけなくなったので
apache 2.2系をインストールする必要があったのでその時の作業メモ

環境

$ cat /etc/issue
CentOS release 6.2 (Final)

ダウンロード

ここから落としてきた
Download - The Apache HTTP Server Project

# apacheのパッケージをインストール
$cd /usr/local/src/
$ wget http://ftp.tsukuba.wide.ad.jp/software/apache//httpd/httpd-2.2.29.tar.gz
#解答
$ tar -xzvf httpd-2.2.29.tar.gz

apacheのインストール

オプションで指定するのは大きく2種類

  • prefixオプションでapacheのホームディレクトリを指定
  • 必要なオプションを有効にする

とりあえず、今回はすでにあるサーバの検証環境用なので、同様のモジュールが入っているように気をつけた
不要なモジュールがありそうだけど・・・

#### 本番側のモジュールの確認
$ /usr/local/apache/bin/apachectl -M
Loaded Modules:
 core_module (static)
 authn_file_module (static)
 authn_default_module (static)
 authz_host_module (static)
 authz_groupfile_module (static)
 authz_user_module (static)
 authz_default_module (static)
 auth_basic_module (static)
 filter_module (static)
 deflate_module (static)
 log_config_module (static)
 env_module (static)
 headers_module (static)
 usertrack_module (static)
 setenvif_module (static)
 version_module (static)
 proxy_module (static)
 proxy_connect_module (static)
 proxy_ftp_module (static)
 proxy_http_module (static)
 proxy_scgi_module (static)
 proxy_ajp_module (static)
 proxy_balancer_module (static)
 mpm_worker_module (static)
 http_module (static)
 mime_module (static)
 status_module (static)
 cgid_module (static)
 dir_module (static)
 alias_module (static)
 rewrite_module (static)
 so_module (static)
Syntax OK

この中で、明示的に指定しないと入らなそうなものを探して指定する事にした。
grep。。。

とりあえず明示的に enableってのがないモジュールは標準で入るのであろうと・・・

インストール実行

$cd httpd-2.2.29
$./configure --prefix=/usr/local/apache2  --enable-deflate --enable-headers --enable-usertrack --enable-proxy --enable-proxy  --enable-proxy-connect --enable-proxy-connect --enable-proxy-ftp --enable-proxy-http --enable-proxy-scgi --enable-proxy-ajp  --enable-proxy-balancer --with-mpm=worker --enable-http --enable-cgid --enable-rewrite --enable-so 
$ make
$make install
メモ:INSTALLファイルはちらみした
#######ヘルプ
$cd httpd-2.2.29
#ヘルプ:インストールするモジュールたちなど、オプションがのってる
$./configure --help

#######INSTALLファイル
$cd httpd-2.2.29
$ less INSTALL
メモ:configureのhelp
$cd httpd-2.2.29
$./configure --help
メモ:deflate_moduleのエラー

deflate_moduleはconfigureのときにエラーがでた。
zlib や zlib-develがないと怒ってくるらしい。今回はzlibさんはいたのでzlib-develさんだけインストール

$ yum install zlib-devel.x86_64

ちょこちょこ

$ln -s /usr/local/apache2 /usr/local/apache

バージョンアップの時とか、必要になったら付け替えられるように

構築してからユーザ作ってないの気づいた・・orz

$ groupadd cy_httpd
$ useradd cy_httpd -g cy_httpd
# 確認
$ id cy_httpd
uid=21552(cy_httpd) gid=20278(cy_httpd) 所属グループ=20278(cy_httpd)
$ chown -R cy_httpd. apache2

起動

$/usr/local/apache/bin/apachectl start

追記

モジュールの有効化について

今回は、必要なモジュールが事前にわかっていたのだけど、わかっていない状態であれば、
soモジュールさえいれていれば、あとで動的モジュールを追加することができるので
標準モジュールだけでmakeしてしまってもいいかもしれない

個人的なログ

 
|д・) ソォーッ… 
 
個人的なログ。
 
 
サイバーエージェントグループ総会で、ベストエンジニア賞の最優秀賞もらいました
f:id:pnsk:20141005205804j:plain
 
たまたま、昼に豪華ランチがあったおかげでふざけた服装してなくて良かった
 
f:id:pnsk:20141005205918j:plain
 
エンジニアとしてもまだまだ未熟なので、
ただただ泥臭くやってきましたが、こんな有難い賞をいただいて光栄です(`・ω・´)
 
スピーチでも言ったけど、
開発環境やってきて、本当はエンジニア、デザイナーさん、プランナーさんたち開発者のみなさんを支えていきたいなぁと思ってやってきたんですが、
逆にいつも支えてもらってたのでそのお礼が言えてよかった(^ω^)
 
スピーチでは、特にバイネームで名前は出さなかったのは、重み付けされてもあれかな〜と思ったので(´・ω・`)
 
でも、やっぱり、
いつも凄く優しく相談にのってくれる名村さんと、小池さんにとても感謝してます。感謝し切れない。
 
あとは、いつも私を支えてくれてる家族に感謝。
 
 
↓家族
f:id:pnsk:20141005211313j:plain
 
これからも、1エンジニアとして結果にこだわっていこうと思ってまふ
 
さてはて。
 
こーゆーことは言葉にすると、語彙力ないので、安っちくなるから、この辺でログは終了。
 
明日からまた月曜日。
台風も来てるけど、また明日からがんばろー*\(^o^)/*
 
 

LINEのスタンプを作ってみよう その1

|・ω・`)コッショリ

エンジニアだけど、どうにか頑張ったらLINEのスタンプもどきくらいを作れるようにならないかと、
気晴らし程度に少しずつやってみようと思った。

クリエイター登録

LINE Creators Market

LINEのアカウントを持っていたので、個人情報だけ追加登録。

とりあえず、制作ガイドラインと審査ガイドラインをチェック。

審査ガイドライン

ひとまず、広告とか、露出高いのとか、誹謗中傷なければ大丈夫そう。
写真とか、文字だけのものはダメっぽい
ただ、Sキャラのスタンプを作ろうと企んでたからキャラクターの台詞は検討しなおさなければいけないな。。。

制作ガイドライン

スタンプのフォーマットはこんな感じ。

必要数:40個
フォーマット:PNG
サイズ (最大):W 370×H 320 pixel

40個・・・

むりくり12個作ったけど、これは道のりが遠いぞ。。。
あと「バカなの?」はリジェクトされそう。。

f:id:pnsk:20140713223350p:plain

つくる

ひとまず作ってみよう。

このページを参考にしてそのままやった。
【超初心者向け!!】秒速でLINEスタンプを自作する方法!|合同会社チームサンタ

このページ素敵すぎた(*゜∀゜*)♪
※内容は参考記事のまんま。。。でも自分めもだし。。うんうん(言い訳

手書きのキャラクターをiPhoneで撮影して、macに移動。
メールで送ったので、それをひとまず、適当なフォルダに保存。

今回は、キャラクターの名前が「saori」なのでそのフォルダを作成して、そこに写真たちを保存した

f:id:pnsk:20140713223913p:plain

「インスタントアルファ」を使って背景を選択して、「delete」ボタン
f:id:pnsk:20140713224211p:plain

pngとして保存する
f:id:pnsk:20140713224315p:plain

まず、トリミングをして、
幅でも高さでもいいので、規定の範囲内になるようにサイズを変える。

f:id:pnsk:20140713224406p:plain

保存

f:id:pnsk:20140713224424p:plain

まじで参考ページに載ってるままにやったらできた(○≧ω≦)♪
なんて素敵なサイトなんだ。


同サイトにのっていたシュミレーションツールを使う
LINEクリエイタースタンプシミュレーター|LINEスタンプ検索サイト Stampers(スタンパーズ)


とりあえずテンションあがるなこれ。
f:id:pnsk:20140713225357p:plain