ChefDKバージョンアップ時に"No live threads left. Deadlock? (fatal)"
今回は、普段、作業環境に使っているVMのChefDK環境をバージョンアップしたときの話です。
ちょっとはまったのでメモ。
バージョンアップ後に、実行してみるとこんなエラーが。(Driverはkitchen-sshをgemでインストールして実行)
# kitchen converge -----> Starting Kitchen (v1.6.0) -----> Converging <*********>... $$$$$$ Running legacy converge for 'Ssh' Driver Preparing files for transfer Preparing dna.json Resolving cookbook dependencies with Berkshelf 4.3.0... /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/command.rb:181:in `join': No live threads left. Deadlock? (fatal) from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/command.rb:181:in `map' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/command.rb:181:in `run_action' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/command/action.rb:39:in `block in call' from /opt/chefdk/embedded/lib/ruby/2.1.0/benchmark.rb:279:in `measure' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/command/action.rb:37:in `call' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/cli.rb:56:in `perform' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/cli.rb:180:in `block (2 levels) in <class:CLI>' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor/command.rb:27:in `run' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/cli.rb:321:in `invoke_task' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/thor-0.19.1/lib/thor/base.rb:440:in `start' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/bin/kitchen:13:in `block in <top (required)>' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/lib/kitchen/errors.rb:154:in `with_friendly_errors' from /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.6.0/bin/kitchen:13:in `<top (required)>' from /usr/bin/kitchen:15:in `load' from /usr/bin/kitchen:15:in `<main>'
調べたところ、~/.chefdk 以下のgemを削除後、再度インストールしてみると良い、とのことでしたので、ディレクトリ内のgemを削除後、
再度、kitchen-sshをインストール。
以降は問題なく実行できました。
今日はこんなところで。
firewalld.service operation time out
CentOS7でfirewalldに慣れようと思ってちょっと使っていたのですが、
そのときに直面したちょっとしたトラブルのメモ。
ゾーンに特定のIPアドレスを追加した後、設定が適用されたかどうかの確認のため、
firewalld.serviceをsystemctlでstop/startしようとしたときに、発生したのが以下の事象。
# systemctl start firewalld Job for firewalld.service failed because a timeout was exceeded. See "systemctl status firewalld.service" and "journalctl -xe" for details.
journalctlでログを見てみると、こんなメッセージが。
# journalctl -xe -- Subject: Unit firewalld.service has failed -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- Unit firewalld.service has failed. -- -- The result is failed. Mar 23 08:31:02 myhost systemd[1]: Unit firewalld.service entered failed state. Mar 23 08:31:02 myhost systemd[1]: firewalld.service failed.
参考リンクの情報に基づき、サーバーの状態を調べてみたら、
firewalldのプロセスがまだ残っていました。どうやらこれが原因のようでした。
残っていたプロセスをkillして再度起動したら、問題なく起動しました。
今日はこんなところで。
Serverspecでcommand実行のResource Typesを使ったときに戻り値が空白になったときのワークアラウンド的なもの
大分ブログを書いていませんでした。
リハビリ的に備忘メモを。
ServerspecでcommandのResource Typesを使って、stderrのチェックするテストを
行っていたのですが、どうも戻り値が空白になるようでうまく動かない。
今回の例は特定のユーザ用にPythonの環境をコンパイルしており、
そのバージョンチェックをテストにしています。テストはこんな感じです。
describe command("/home/myuser/python/bin/python -V") do its(:stderr) { should match "Python 2.7.3" } end
結果はこんな感じ。
2) Command "su -l myuser -c '/home/myuser/python/bin/python -V'" stderr should match "Python 2.7.3" Failure/Error: its(:stderr) { should match "Python" } expected "" to match "Python 2.7.3" /bin/sh -c su\ -l\ myuser\ -c\ \'/home/myuser/python/bin/python\ -V\'
色々やってみたのですが、うまくいかなかったので、
ワークアラウンド的に参考リンクを元に、全てを標準出力に出してみました。
describe command("su -l myuser -c '/home/myuser/python/bin/python -V 2>&1'") do its(:stdout) { should match "Python 2.7.3" } end
こうすることで、一旦テストは成功するようになりました。
今日はこんなところで。
TrailDashを使ってみる
CloudTrailを可視化するTrailDashというものがあることを知り、使ってみました。
# 参考のサイトほぼそのままですが、自分でやったメモです。
CloudTrailとSQS環境を作る
まずはCloudTrail環境を作ります。
S3バケットとSNSの設定を行います。
CloudTrailを有効にしました。
次にSQSの設定を行います。Queueの設定を行います。
デフォルトの設定でQueueを設定します。
SNS Topicとの関連付けを行います。
SNS Topicの設定を行います。
設定を有効にしました。
TrailDash環境を作る
TrailDashはDocker上で動きます。
今回はEC2でCentOS6.6のインスタンスを稼動させ、ここでDockerを動かしました。
まずは、EC2インスタンスにIAMRoleの設定をするためにIAMRoleを作成しました。
IAMRoleは、S3およびSQSのフルアクセスをつけたRoleとしました。
次にepelのリポジトリを参照できるようにし、Dockerをインストール。
# rpm -ivh http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm # yum install --enablerepo=epel docker-io # service docker start
その後、TrailDashのテンプレートをダウンロードし、コンテナを起動。
# docker pull appliedtrust/traildash # docker run -i -d -p 7000:7000 -e "AWS_SQS_URL=https://sqs.ap-northeast-1.amazonaws.com/<your id>/cloudtrail" -e "AWS_REGION=ap-northeast-1" -e "DEBUG=1" -v /home/traildash:/var/lib/elasticsearch/ appliedtrust/traildash
指定した7000番ポートにブラウザでアクセスしたところ、TrailDashの画面が表示されました。
ログがグラフィカルに表示され、とても素敵な感じです。
いろいろ工夫してみようと思います。
今日はこんなところで。
Dockerを触る
触ろう、触ろうと思ってなかなか触れなかったDockerを簡単に触ったので、そのメモです。
今回はCentOS6.6(64bit版)を使って環境を作りました。
インストール
EPELリポジトリからRPMパッケージでインストールします。
# rpm -ivh http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm # yum install --enablerepo=epel docker-io
サービスが起動できればOK。
# service docker start Starting cgconfig service: [ OK ] Starting docker: [ OK ]
コンテナを操作してみる
コマンドを試してみます。
コンテナの情報を表示
# docker info Containers: 0 Images: 2 Storage Driver: devicemapper Pool Name: docker-253:0-25057-pool Pool Blocksize: 65.54 kB Data file: /var/lib/docker/devicemapper/devicemapper/data Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata Data Space Used: 306.8 MB Data Space Total: 107.4 GB Metadata Space Used: 782.3 kB Metadata Space Total: 2.147 GB Library Version: 1.02.89-RHEL6 (2014-09-01) Execution Driver: native-0.2 Kernel Version: 2.6.32-504.12.2.el6.x86_64 Operating System: <unknown> CPUs: 1 Total Memory: 490.4 MiB Name: localhost.localdomain ID: YEDK:TCTC:VEJU:TQWG:ETRC:LSX2:TIY5:YTMC:62GJ:ZY7L:HS74:OSXG
バージョンの確認
# docker version Client version: 1.4.1 Client API version: 1.16 Go version (client): go1.3.3 Git commit (client): 5bc2ff8/1.4.1 OS/Arch (client): linux/amd64 Server version: 1.4.1 Server API version: 1.16 Go version (server): go1.3.3 Git commit (server): 5bc2ff8/1.4.1
Docker Imageをダウンロード
CentOSの最新版イメージをダウンロードする例です。
# docker pull centos:latest centos:latest: The image you are pulling has been verified 511136ea3c5a: Pull complete b6718650e87e: Pull complete 41054cbffecc: Pull complete 214a4932132a: Pull complete Status: Downloaded newer image for centos:latest
Docker Imageの一覧表示
# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos latest 214a4932132a 43 hours ago 229.6 MB
Docker Imageを起動する
# docker run -i -t -d 214a4932132a /bin/bash 506b46e19ba9da0760c83f947cdf972693ad6a47f05ead789efea499c83555c7
起動中のコンテナを表示する
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 506b46e19ba9 centos:latest "/bin/bash" 8 minutes ago Up 8 minutes furious
起動したコンテナに接続する
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 506b46e19ba9 centos:latest "/bin/bash" 9 seconds ago Up 8 seconds furious # docker exec -it 506b46e19ba9 /bin/bash [root@506b46e19ba9 /]# ps -fe UID PID PPID C STIME TTY TIME CMD root 1 0 0 12:03 ? 00:00:00 /bin/bash root 19 0 0 12:05 ? 00:00:00 /bin/bash root 38 19 0 12:05 ? 00:00:00 ps -fe [root@506b46e19ba9 /]# cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core)
コンテナを起動する
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 506b46e19ba9 centos:latest "/bin/bash" 9 seconds ago Up 8 seconds furious # docker start 506b46e19ba9 506b46e19ba9
コンテナを停止する
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 506b46e19ba9 centos:latest "/bin/bash" 9 seconds ago Up 8 seconds furious # docker stop 506b46e19ba9 506b46e19ba9
コンテナを再起動する
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 506b46e19ba9 centos:latest "/bin/bash" 9 seconds ago Up 8 seconds furious # docker restart 506b46e19ba9 506b46e19ba9
コンテナを削除する
# docker stop 506b46e19ba9 506b46e19ba9 # docker rm 506b46e19ba9 506b46e19ba9 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
イメージを削除する
# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos latest 214a4932132a 43 hours ago 229.6 MB # docker rmi 214a4932132a Untagged: centos:latest Deleted: 214a4932132a05e9cc97624436a77743f368948c4776b186975d319140e8b45c Deleted: 41054cbffecca8ca909a0c4c163eb0ddb25f50311a96de136239d3b4287b3618 Deleted: b6718650e87e3706c52682c87ecfd7a7e1fc176c9095d73d627ca41b2584839b Deleted: 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158 # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
時間を作ってまた触っていこうと思います。
今日はこんなところで。