2017年8月16日水曜日

MAC ssh接続先によってターミナルのバックグラウンド色を変える

  • このエントリーをはてなブックマークに追加


MAC ssh接続先によってターミナルのバックグラウンド色を変える

MacでSSH接続先ホストに基いてTerminalのBackgroundの色を変える方法をメモしておきます。

sshシェル作成

/usr/local/bin/sshを作成し、以下の様な内容を記載。実行パーミッションを追加

#!/bin/bash

HOSTNAME=`echo $@ | sed s/.*@//`

set_bg () {
osascript -e "tell application \"Terminal\" to set background color of window 1 to $1"
}

#ssh接続切ったあと、緑色に変わる
on_exit () {
set_bg "{0, 25000, 0, 50000}"
}
trap on_exit EXIT

case $HOSTNAME in
# live-から始まるホストの場合は、赤に変わる
live-*) set_bg "{30000, 0, 0, 50000}" ;;
# stg-から始まるホストの場合は、緑に変わる
stg-*) set_bg "{0, 45000, 0, 50000}" ;;
# それ以外の場合は、青に変わる
*) set_bg "{0, 0, 30000, 50000}" ;;
esac

/usr/bin/ssh "$@"

PATHに/usr/local/binが/usr/binの先頭に書く

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

2017年6月27日火曜日

CentOS Pamでケルベロス認証 グループ制限

  • このエントリーをはてなブックマークに追加


CentOS Pamでケルベロス認証 グループ制限Pamでケルベロス認証のための設定をメモしておきます。
グループでログイン制御することもできます。
参考情報
https://www.linux.iastate.edu/content/using-pam-kerberos-authentication-and-group-access-control
/etc/pam.d/system-authのサンプル
testgroup以外のユーザーはログインできないようにする
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
# only allow auth for member of testgroup
auth requisite pam_succeed_if.so user ingroup testgroup
auth requisite pam_succeed_if.so uid >= 500 quiet
# for kerberos
auth sufficient pam_krb5.so use_first_pass
auth required pam_deny.so

account required pam_unix.so broken_shadow
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
# for kerberos
account [default=bad success=ok user_unknown=ignore] pam_krb5.so
account required pam_permit.so

password requisite pam_cracklib.so try_first_pass retry=3 type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
# for kerberos
password sufficient pam_krb5.so use_authtok
password required pam_deny.so

session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
# for kerberos
session optional pam_krb5.so
グループ制御ではingroup, notingroupというのがあります。
ingroupはグループ内のユーザーしかログインできない
notingroupはグループに所属していないユーザーしかログインできない。

2017年6月15日木曜日

HortonWorks ODBCでHIVEServerに接続する設定手順

  • このエントリーをはてなブックマークに追加


HortonWorks ODBCでHIVEServerに接続する設定手順ODBCでHIVEに接続する手順をメモしておきます。

HortonWorksサイトからODBCドライバーをダウンロード

https://jp.hortonworks.com/downloads/
Hortonworks ODBC Driver for Apache Hive (v2.1.7)

ODBCドライバーをインストール

 $ sudo rpm -ivh hive-odbc-native-2.1.7.1010-1.el6.x86_64.rpm

インストール先確認
$ ls /usr/lib/hive/lib/native

.odbc.iniを作成

 $ cd /usr/lib/hive/lib/native/Linux-amd64-64
$ cat .odbc.ini
---------------------------------------------------------------
[ODBC]

[ODBC Data Sources]
HIVE

[HIVE]
Driver=/usr/lib/hive/lib/native/Linux-amd64-64/libhortonworkshiveodbc64.so
#環境ごとに変更
HOST=srv.example.com
PORT=10000
Schema=
ServiceDiscoveryMode=0
ZKNamespace=
HiveServerType=2
#kerberos認証にするため、AuthMechを1に設定
AuthMech=1
ThriftTransport=1
UseNativeQuery=0
UID=hue
#環境ごとに変更
KrbHostFQDN=srv.example.com
KrbServiceName=hive
#環境ごとに変更
KrbRealm=example.com
SSL=0
TwoWaySSL=0
ClientCert=
ClientPrivateKey=
ClientPrivateKeyPassword=
---------------------------------------------------------------
権限変更、しないとエラーが出る可能性があります。
$ chmod 777 .odbc.ini
サンプルファイルは以下にあります。
 /usr/lib/hive/lib/native/hiveodbc/Setup/odbc.ini

環境変数設定

xport ODBCINI=/usr/lib/hive/lib/native/Linux-amd64-64/.odbc.ini
or
/etc/profileにexport ODBCINI=/usr/lib/hive/lib/native/Linux-amd64-64/.odbc.ini を追加

参考Kerberos設定

$ cat /etc/krb5.conf
# Configuration snippets may be placed in this directory as well
#includedir /etc/krb5.conf.d/

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 30d
renew_lifetime = 7d
forwardable = true

# for One-Way Trust with Active Directory
permitted_enctypes = des-cbc-crc des-cbc-md5 arcfour-hmac aes128-cts-hmac-sha1-96 aes256-cts-hmac-sha1-96
udp_preference_limit = 1

[realms]
EXAMPLE.COM = {
kdc = or
hostname> admin_server = or hostname> } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM

ERROR

Traceback (most recent call last):
File "<stdin>", line 4, in <module>
File "/tmp/hound/hound/tbx/hoover/_hoover_price.py", line 75, in fetch_hoover_price
verbose=verbose
File "/tmp/hound/hound/tbx/odbc/_odbc.py", line 55, in execute
autocommit=True
pyodbc.Error: ('08001', '[08001] [unixODBC][Hortonworks][ODBC] (10380) Unable to establish a connection with data source. Missing settings: {[Host] [Port]} (10380) (SQLDriverConnect)')
  • 解決
    .odbc.iniファイルの権限を見直す 777にするとか

2017年2月14日火曜日

Mac Juypter インストール時にエラー [Errno 1] Operation not permitted

  • このエントリーをはてなブックマークに追加


Mac Juypter インストール時にエラー [Errno 1] Operation not permittedMac にJuypterをインストールしようとすると、以下のようなエラーが発生しました。
sudo pip install jupyter
Exception:
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/pip/basecommand.py", line 215, in main
status = self.run(options, args)
File "/Library/Python/2.7/site-packages/pip/commands/install.py", line 342, in run
prefix=options.prefix_path,
File "/Library/Python/2.7/site-packages/pip/req/req_set.py", line 778, in install
requirement.uninstall(auto_confirm=True)
File "/Library/Python/2.7/site-packages/pip/req/req_install.py", line 754, in uninstall
paths_to_remove.remove(auto_confirm)
File "/Library/Python/2.7/site-packages/pip/req/req_uninstall.py", line 115, in remove
renames(path, new_path)
File "/Library/Python/2.7/site-packages/pip/utils/__init__.py", line 267, in renames
shutil.move(old, new)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 299, in move
copytree(src, real_dst, symlinks=True)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 208, in copytree
raise Error, errors
Error: [('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py', '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py', "[Errno 1] Operation not permitted: '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc', '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py', '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py', "[Errno 1] Operation not permitted: '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc', '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib', '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib', "[Errno 1] Operation not permitted: '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib'")]

解決

python 再度インストール
brew reinstall python
再度実行で成功

2017年2月12日日曜日

AWS Lambda RDSにデータをInsertするとError発生時にアラート通知

  • このエントリーをはてなブックマークに追加


AWS Lambda RDSにデータをInsertするとError発生時にアラート通知

AWS LambdaでRDSにデータをインサートする処理を実現しています。
正しくインサートするときに何もしなく、そのまま終了、
インサートするときにエラーが発生した場合は、Alertメールで通知したい。

Sample Code

var mysql = require('mysql');
exports.handler = function(event,context,callback){
var No = event.No
var Birth = event.Birth
var Email = event.Email
var Name = event.Name

if(No == null || Birth == null || Email == null || Name == null){
context.done('FAILED');
}

var connection = mysql.createConnection({
host : 'rds endpoint url', //RDSのエンドポイント
user : 'root', //MySQLのユーザ名
password : 'password', //MySQLのパスワード
database : 'db'
});

connection.connect();

var insert_sql = "insert into User (No, Birth, Email, Name) value ('" + No + "','" + Birth +"','" + Email +"','" + Name + "')"
connection.query(insert_sql, function(err, rows, fields) {
if (err)
{
console.log("--err");
console.log(err);
callback(new Error("FAILED"));
}
});

connection.end(function(err) {
context.done('SUCCESSED');
});
}

Lambdaモニタリング設定

「Lambda ⇒ 「関数」 ⇒ 「モニタリング」タブで【呼び出しエラー】というものがあります。
monitoring

これを設定すればエラー発生したら、設定したメールアドレスにメールが飛びます。

エラー(Errors)
が>
=1
を1回連続した場合

間隔:5分間
統計:Standard
などの値を設定し、通知の送信先を選択する。

alert

これでうまくいくかと思いきゃ、実は成功のときも、エラーが通知されてしまいます。よくないね。いろいろ調べたところ、このエラーは以下の意味を示しています。
http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/lam-metricscollected.html

- 処理された例外 (context.fail(error) など)
- コードの終了を起こす処理されない例外
- メモリ不足例外
- タイムアウト
- 権限エラー

解決

ソースコードの以下の部分が悪かった。

 connection.end(function(err) {
context.done('SUCCESSED');
});

これだと、実行後常にエラーメッセージSuccessedで以上終了してしまいます。
以下のように変更すれば、正常に終了されます。

 connection.end(function(err) {
context.done();
});

結構ハマりました。

2017年2月3日金曜日

AWS Lambda connect ETIMEDOUT

  • このエントリーをはてなブックマークに追加


AWS Lambda connect ETIMEDOUTAWS LambdaでDB接続してデータをインサートするFunctionを書いていて、以下のような ETIMEDOUTエラーが出力されました。エラーがあったが、処理自体は正常に行われてデータがちゃんとDBに挿入されてます。
Error
2017-02-03T05:11:32.012Z    c31fa576-e9cc-11e6-85b4-5dea6b0e5632    { [Error: connect ETIMEDOUT] errorno: 'ETIMEDOUT', code: 'ETIMEDOUT', syscall: 'connect', fatal: true }
Code
var mysql = require('mysql');
exports.handler = function(event,context,callback){
var No = event.No
var Birth = event.Birth
var Email = event.Email
var Name = event.Name

if(No == null || Birth == null || Email == null || Name == null){
context.done('FAILED');
}

var connection = mysql.createConnection({
host : 'rds endpoint url', //RDSのエンドポイント
user : 'root', //MySQLのユーザ名
password : 'password', //MySQLのパスワード
database : 'db'
});

connection.connect();

var insert_sql = "insert into User (No, Birth, Email, Name) value ('" + No + "','" + Birth +"','" + Email +"','" + Name + "')"
connection.query(insert_sql, function(err, rows, fields) {
if (err)
{
console.log("--err");
console.log(err);
callback(new Error("FAILED"));
}
});

connection.end(function(err) {
context.done('SUCCESSED');
});
}
いろいろ調べたのですが、LambdaのTimeout値を超えたとか、RDSへのアクセス権ないとか、いろいろありました。
自分の場合は、connection.connect() の一番先頭に持っていたらうまくいった。よくわからんけど。
以下の様な感じです。
var mysql = require('mysql');
exports.handler = function(event,context,callback){
var connection = mysql.createConnection({
host : 'rds endpoint url', //RDSのエンドポイント
user : 'root', //MySQLのユーザ名
password : 'password', //MySQLのパスワード
database : 'db'
});

connection.connect();

var No = event.No
var Birth = event.Birth
var Email = event.Email
var Name = event.Name

if(No == null || Birth == null || Email == null || Name == null){
context.done('FAILED');
}

var insert_sql = "insert into User (No, Birth, Email, Name) value ('" + No + "','" + Birth +"','" + Email +"','" + Name + "')"
connection.query(insert_sql, function(err, rows, fields) {
if (err)
{
console.log("--err");
console.log(err);
callback(new Error("FAILED"));
}
});

connection.end(function(err) {
context.done('SUCCESSED');
});
}

2017年1月27日金曜日

MatterMost hook executed successfully but returned http reponse 500

  • このエントリーをはてなブックマークに追加


MatterMost hook executed successfully but returned http reponse 500

Gitlab オンプレミス版インストールしたので、内蔵されているSlcakのクローン版MatterMostとの連携をしてみました。

MatterMostを有効にする

  • デフォルトではMatterMostが無効になっているため、有効にする必要がある。
# vi /etc/gitlab/gitlab.rb
mattermost_external_url 'http://mattermost.test.com'

Gitlabと違うドメイン名が推奨されてますが、同じドメイン名でポート番号だけ変えればOK。

例えば
http://10.10.100.1:9999

  • GitlabをReconfigure
sudo gitlab-ctl reconfigure

これでURLからアクセスできるようになる。Teamを作って、招待リングを作って関係者招待すればOK

参考
https://docs.gitlab.com/omnibus/gitlab-mattermost/

GitlabとMatterMost連携

MatterMostでWebHookを有効

Teamを右クリック → System console → Service Settings 以下の項目をTrueにする

  • Enable Incoming Webhooks: true
    When true, incoming webhooks will be allowed. To help combat phishing attacks, all posts from webhooks will be labelled by a BOT tag.
  • Enable Outgoing Webhooks: true
    When true, outgoing webhooks will be allowed.
  • Enable Slash Commands: true
    When true, user created slash commands will be allowed.
  • Enable Integrations for Admin Only: true
    When true, user created integrations can only be created by admins.
  • Enable Overriding Usernames from Webhooks and Slash Commands: true
    When true, webhooks and slash commands will be allowed to change the username they are posting as. Note, combined with allowing icon overriding, this could open users up to phishing attacks.
  • Enable Overriding Icon from Webhooks and Slash Commands: true

上記項目を有効にしないと、matterMostのIntegration画面が表示されない。

チャンネルごとにWebHook用URLを作成

Teamを右クリック → Account Settings → Integrations → Incoming Webhooks
対応チャネルを選択し、ADDで追加する。URLが表示されます。

GitlabでWebHook設定

最初に Gitlabプロジェクト → Settings → WebHooks画面でMatterMostのURLを追加したのですが、以下のエラーが表示されます。

Error

hook executed successfully but returned http reponse 500

色々調べたところ、どうやら、Webhooks画面ではなく、Services画面でSlackを有効にして、MatterMostのWebhook URLとチャンネル名入力してできました。

解決

DO NOT create webhook in Gitlab from Projects Settings > Webhooks page.
DO create webhook from Projects Settings > Services > Slack page