SourceTreeで「Couldn't agree a key exchange algorithm」エラー
概要
SourceTreeでプッシュしようとしたらブランチが表示されず、ターミナルから「git push」してみると「Couldn't agree a key exchange algorithm」エラーがダイアログ表示された時の対応メモ
※内臓Gitを利用している場合
対応
- SourceTreeの「ツール」→「オプション」を順に選択する
- 「オプション」ダイアログが表示されるので「Git」タブを選択し「Gitバージョン」グループの「Update Embedded」をクリックする
CloudFormationにおけるエラー対応メモ
概要
AWSのCloudFormationで出力されるエラーメッセージとその対応についての備忘録
都度追記していく
Update the IAM policy to add permission
エラーメッセージ
Lambda@Edge cannot retrieve the specified Lambda function. Update the IAM policy to add permission: lambda:GetFunction for resource: arn:aws:lambda:us-east-1:xxxx:function:yyyy:1 and try again. (Service: AmazonCloudFront; Status Code: 400; Error Code: InvalidLambdaFunctionAssociation; Request ID: zzzz)
対応
単純にlambdaのGetFunctionの権限が無いというもの。対象のlambdaを参照する側のリソースを特定して権限を与えればOK。
例外的なケースとして、このlambdaのバージョンは別のIAMポリシーで作られており、そのポリシーが設定されていないという場合もあった。
例えばCloudFormationのstack-Aとしてlambdaバージョン1と2を作っていたが、stack-Aは削除しており、stack-Bを新たに作成した際にlambdaバージョン1を参照しているケースである。尚、stack-Aとstack-Bでそれぞれ参照用のポリシーを作成して適用している場合に古いバージョンが参照できなくなる。
puttyのセッションをバッチ実行する際の便利な記述
概要
puttyのセッションが増えてくると実行する際に手間取るのでバッチ実行するやり方
前提
環境変数かSETを使って「PATH_PUTTY」にputty.exeのパスが入っているものとする
やり方
単純な実行方法
下記の文字列をテキストファイルに書き込み、拡張子を .bat にすればOK
ex) mytest.bat
start "" %PATH_PUTTY% -load "セッション名"
ファイル名に連動させる方法
下記の場合はファイル名をセッション名として実行する
例えばファイル名が mytest.bat であればセッション名が mytest のものが実行される
こうしておけば中身の文字列は変更せずにファイル名だけセッション名に合わせてコピーすればすぐ使えるようになる
start "" %PATH_PUTTY% -load "%~n0"
環境変数を使いたくない場合で、フォルダで管理する場合のtips
下記のような構成にしておけばinit.batが親に存在する場合は再帰で呼び出してくれるので、先頭の一か所にパスを書けば良くなる
/top/init.bat
SET PATH_PUTTY="C:\Program Files\putty\puttyjp.exe"
/top/sub/init.bat
IF EXIST %~dp0"..\init.bat" (call %~dp0"..\init.bat")
/top/sub/mytest.bat
IF EXIST %~dp0"init.bat" (call %~dp0"init.bat") start "" %PATH_PUTTY% -load "%~n0"
新規ページを閲覧する際に10秒程度待たされるようになった
概要
windows10環境において、突然インターネットでページを閲覧する度に10秒程度待たされるようになった
その現象の解決方法について
現象
- ページ閲覧する度に10秒程度待たされる
- 一度閲覧すると2回目以降は速い(初回アクセスのページだけ遅い )
原因
早い話がIPv6のDNSでIP解決しようとして、失敗している場合にこの現象が発生する
(※IPv6のDNSを用意してあり、正しく設定している場合はこのケースでは無い)
10秒程度待てばIPv4のDNSでIP解決出来ているようで、時間はかかるがアクセス出来てしまうのが厄介
解決方法
IPv6を使わないのであればネットワークアダプタの設定でIPv6を外してしまうのが手っ取り早い
使うのであればDNS設定を正しくする
トリガー
そもそも突然こうなった訳では無い、理由がある
著者のケースではvirtualboxをインストールした事がきっかけになったと思われる
想像になるが、今まではIPv4側が優先的に使われていたが、virtualboxインストール時にIPv6側が優先されたのではないか
類似問題かどうかの確認方法
chromeの開発者ツールを使ってネットワークタブを表示した状態で現象を発生させると、タイムラインからどこに時間を要したか分かる
これがDNS Lookupであり、10秒に近い場合は類似問題の可能性が高い
参考
- DNS におけるリゾルバの動作解析
- この論文でタイムアウト値が10秒である点から原因を突き止められた、有り難い
gradleのhello worldメモ
memo
gradleのhello world的なサイトを見ながら操作メモです。(centos7)
gradleのインストール
# cd ~ # yum install -y which unzip zip vim # curl -s http://get.sdkman.io | bash # source ~/.sdkman/bin/sdkman-init.sh # sdk install gradle
hello woldのコンパイルと実行
# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel # mkdir myapp && cd myapp # gradle init --type java-application # gradle compileJava # gradle run
jarの作成と実行
# gradle jar # ls -la build/libs/ # java -cp build/libs/myapp.jar myapp/App
build.gradleに簡単なタスクを追加して実行
# vim build.gradle ※ファイル末尾に下記を追記 task hello { doLast { println "Hello World!!" } }
# gradle hello > Task :hello Hello World!!
カスタムタスクの利用
DefaultTaskから派生したタスクを定義しておき、実行するメソッドにアノテーションを付けておけば、「type:」で型を指定する形でオブジェクトを生成して実行する事ができる。pluginで提供される機能に対し、任意のパラメータを上書きして実行させるなどして利用する。
class AAATask extends DefaultTask { String message @TaskAction def execMyTask() { println("message is ${message}") } } task execMyTask(type: AAATask) { message = "Hello World" }
サーバーにsshログインした時にslackに通知する
概要
サーバーにsshログインした時にslackに通知する
slack側での作業
- 「チャネル設定」→「アプリを追加する」を順にクリックする
- 「incoming-webhook」をインストールする
- 「incoming-webhook」の設定にある「Webhook URL」をメモする
サーバー側での作業(CentOS7)
下記の「channel-name」と「http://hooks...」の部分は環境に合わせて要変更
$ sudo vim /etc/ssh/sshrc
#!/bin/bash CHANNEL="#channel-name" HOSTNAME=`hostname` MESSAGE="username:${USER} from:${SSH_CLIENT} server:${HOSTNAME}" WEBHOOK_URL='https://hooks.slack.com/services/xxxx/xxxx/xxxx' curl -X POST --data-urlencode 'payload={"channel": "'"${CHANNEL}"'", "username": "login notification", "text": "'"${MESSAGE}"'"}' ${WEBHOOK_URL} 1>/dev/null 2>/dev/null