かべぎわブログ

ブログです

Serverspecをつかってみる

概要

Serverspecをさわってみます。

Serverspecのインストール

Rubyがはいっていればこれだけでインストールができます。

$ gem install serverspec

Serverspecの設定

以下コマンドを入力してServerspecの設定を行います。
OSはUNIXで対象はExec(local)にしています。

$ serverspec-init

serverspec-init
Select OS type:

  1) UN*X
  2) Windows

Select number: 1

Select a backend type:

  1) SSH
  2) Exec (local)

Select number: 2

するとこんなかんじのファイル群ができます。

$ tree ./spec
./spec
├── localhost
│   └── sample_spec.rb
└── spec_helper.rb

テストしてみる

./spec/localhost/sample_spec.rbがlocalhost環境で実行されるテストファイルになるのでこれをかんたんに以下のように書き換えてみる。
cronが起動しているかどうかテストするようにしている。

require 'spec_helper'

describe service('cron') do
    it { should be_running }
end

rake specコマンドを実行するとこのテストが実行される。
0 failuresとなっていることがわかる。

rake spec
/usr/bin/ruby2.5 -I/var/lib/gems/2.5.0/gems/rspec-support-3.8.0/lib:/var/lib/gems/2.5.0/gems/rspec-core-3.8.0/lib /var/lib/gems/2.5.0/gems/rspec-core-3.8.0/exe/rspec --pattern spec/localhost/\*_spec.rb
/var/lib/gems/2.5.0/gems/rspec-core-3.8.0/lib/rspec/core/rake_task.rb:79: warning: Insecure world writable dir /root/.rbenv/shims in PATH, mode 040777

Service "cron"
/var/lib/gems/2.5.0/gems/specinfra-2.76.7/lib/specinfra/backend/exec.rb:123: warning: Insecure world writable dir /root/.rbenv/shims in PATH, mode 040777
  should be running

Finished in 0.72735 seconds (files took 1.24 seconds to load)
1 example, 0 failures

当然cronはうごいている。

$ service cron status
 * cron is running

cronを止めてからテストしてみると

$ service cron stop
$ service cron status
 * cron is not running

1 failureとなっていることがわかる。

rake spec
/usr/bin/ruby2.5 -I/var/lib/gems/2.5.0/gems/rspec-support-3.8.0/lib:/var/lib/gems/2.5.0/gems/rspec-core-3.8.0/lib /var/lib/gems/2.5.0/gems/rspec-core-3.8.0/exe/rspec --pattern spec/localhost/\*_spec.rb
/var/lib/gems/2.5.0/gems/rspec-core-3.8.0/lib/rspec/core/rake_task.rb:79: warning: Insecure world writable dir /root/.rbenv/shims in PATH, mode 040777

Service "cron"
/var/lib/gems/2.5.0/gems/specinfra-2.76.7/lib/specinfra/backend/exec.rb:123: warning: Insecure world writable dir /root/.rbenv/shims in PATH, mode 040777
  should be running (FAILED - 1)

Failures:

  1) Service "cron" should be running
     On host `localhost'
     Failure/Error: it { should be_running }
       expected Service "cron" to be running
       /bin/sh -c ps\ aux\ \|\ grep\ -w\ --\ cron\ \|\ grep\ -qv\ grep

     # ./spec/localhost/sample_spec.rb:5:in `block (2 levels) in <top (required)>'

Finished in 0.83032 seconds (files took 1.26 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/localhost/sample_spec.rb:5 # Service "cron" should be running

/usr/bin/ruby2.5 -I/var/lib/gems/2.5.0/gems/rspec-support-3.8.0/lib:/var/lib/gems/2.5.0/gems/rspec-core-3.8.0/lib /var/lib/gems/2.5.0/gems/rspec-core-3.8.0/exe/rspec --pattern spec/localhost/\*_spec.rb failed

おわりに

やってみた。

Serverspec

Serverspec

WSLのUbuntuにServerspecをインストールする

Windows Subsystem for Linux上のUbuntuにServerspecをインストールしてみたいと思います。     

手順

こんなかんじでインストールすることができます。

gitのインストール

まずgitをインストールします。

$ sudo apt-get install git

Ruby関係のインストール

ServerSpecはRubyのRSpecを利用したものなのでRubyをインストールしてあげる必要があります。

rbenvのインストールと設定

git cloneでrbenvをもってきて

$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv

PATHをとおしてあげて

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

.bash_profileを再読込してあげる

$ source ~/.bash_profile

ruby-buildのインストール

$ mkdir -p "$(rbenv root)"/plugins
$ git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
$ sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm5 libgdbm-dev

Rubyのインストール

Rubyのこの時点での最新版の2.6.0をインストールします。

$ rbenv install 2.6.0

利用するRubyのバージョンを指定

$ rbenv global 2.6.0

インストールできました!

$ ruby --version
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]

Serverspecのインストール

Rubyがはいっていればこれだけでインストールができます。

$ gem install serverspec

Serverspec

Serverspec

鍵認証のサーバにscpでファイルを転送する

鍵認証のサーバにscpでファイルを転送してみます。

コマンドはこんなかんじ。

$ scp -i 鍵のPATH コピー元ファイル ユーザ@コピー先アドレス:コピー先PATH

わかりにくいから実際に書いてみるとこんなかんじ。

$ scp -i ~/.ssh/wawawa-key.pem ./wawawa.txt centos@wawawa.com:/home/centos/.

標準テキスト CentOS 7 構築・運用・管理パーフェクトガイド

標準テキスト CentOS 7 構築・運用・管理パーフェクトガイド

  • 作者: 有限会社ナレッジデザイン大竹龍史,市来秀男,山本道子,山崎佳子
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2017/03/22
  • メディア: 単行本
  • この商品を含むブログを見る

WSLのUbuntuにRubyをインストールする

GWindows Subsystem for Linux上のUbuntuにRubyをインストールしてみたいと思います。     

手順

こんなかんじでインストールすることができます。

apt install してあげます。

$ sudo apt install ruby

インストールできました!

$ ruby --version
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]

Serverspec

Serverspec

WSLのUbuntuにGoogle Cloud SDKをインストールする

Windows Subsystem for Linux上のUbuntuにGoogle Cloud SDKをインストールしてみたいと思います。

手順

こんなかんじでインストールすることができます。

Cloud SDKのリポジトリの環境変数を作成

$ export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"

パッケージ元としてCloud SDKを追加

途中でパスワードをきかれるので入力してあげる。

$ echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

GCPの公開鍵をインポート

$ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

Cloud SDKを更新してインストール

$ sudo apt-get update && sudo apt-get install google-cloud-sdk

これでインストールは完了です!!!!!

インストール完了

インストールできました!!!!

$ gcloud --version
Google Cloud SDK 229.0.0
alpha 2019.01.04
beta 2019.01.04
bq 2.0.39
core 2019.01.04
gsutil 4.35
kubectl 2019.01.04



おわり

Google Cloud Platformではじめる機械学習と深層学習

Google Cloud Platformではじめる機械学習と深層学習

GCPのCloud Storageをgsutilでバケットをつくっていろいろする

GCPのCloud Storageをgsutilでバケットをつくってみたいと思います。

そもそもgsutilってなんやねん?

Google Cloud Storageを操作するためのCLIツールのこと。
Cloud SDKをインストールすることでつかえるようになるよ。
おわり。

バケットを作成する

この場合だとリージョンがasia-northeast-1でバケット名がkabegiwa-bucketになる。
ちなみにmbというのはmake bucketのかしらもじのmb

$ gsutil mb -l asia-northeast1 gs://kabegiwa-bucket/
Creating gs://kabegiwa-bucket/...

#バケットの一覧を確認する バケットができたのかどうかlistで確認してみます。

$ gsutil ls
gs://kabegiwa-bucket/

オブジェクトをアップロードする

適当なファイルをバケットにアップロードしてみます。

$ gsutil cp ./wawawa.txt gs://kabegiwa-bucket/wawawa.txt
Copying file://./wawawa.txt [Content-Type=text/plain]...
/ [1 files][    7.0 B/    7.0 B]
Operation completed over 1 objects/7.0 B.

アップロードできたかどうか確認する

$ gsutil ls gs://kabegiwa-bucket/
gs://kabegiwa-bucket/wawawa.txt

オブジェクトを削除する

$ gsutil rm gs://kabegiwa-bucket/wawawa.txt
Removing gs://kabegiwa-bucket/wawawa.txt...
/ [1 objects]
Operation completed over 1 objects.

バケットを削除する

rbはremove bucketのrb

$ gsutil rb gs://kabegiwa-bucket
Removing gs://kabegiwa-bucket/...



おわり

プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで

プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで

AWSCLIでキーペアを作成する

概要

AWSCLIを利用してキーペアを作成してみます。

環境

  • Amazon Linux2
  • キーペアをつくれる権限のIAMロールがアタッチされている

手順

キーペアをつくれる権限のIAMロールがアタッチされているAmazonLinux2で以下のコマンドを実行します。
wawawa_keyの部分は適当に変えてあげてください。

$ aws ec2 create-key-pair --key-name wawawa_key --query 'KeyMaterial' --output text > ~/.ssh/wawawa_key.pem

キーができました。

$ cat ~/.ssh/wawawa_key.pem
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAjRFTwhosQclZNVif2u0rFvk2IIidsDcLHRTDyQZaZcAhwMTFNxqDBo50vWWz
bnklpIC4M6jESwvIFhmd8CuVKYG/qyQJ2AfETXLHkm+AQjZN/iFxiuQSWGczRxe8HBt2ZB906McQ
cuEewjAtXVHNCJ6YuCFiVzhOQsnVpwRTy3y/5dFfyPZJMlumK+z/rjqFqLojU3OoSPdvxNnhqzMt
VvQ39Dnjiu7zNeVkeapsSBnsoJkWdrPUckjCStkjtlmGuPkCPwSuY53hderZlbnmmJ07duCshAcz
~~~省略~~~
-----END RSA PRIVATE KEY-----

マネジメントコンソールにも登録されています。
f:id:kabegiwakun:20190112101244p:plain

このLinux上からキーとして利用するために権限を変えてあげます。

$ sudo chmod 600 ~/.ssh/wawawa_key.pem

これでキーペアの作成は完了です。
こんなかんじでssh接続する際に利用することができます。

$ ssh -i ~/.ssh/wawawa_key.pem ec2-user@192.168.1.xxx



徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

  • 作者: ??部昭寛,宮?光平,菖蒲淳司,株式会社ソキウス・ジャパン
  • 出版社/メーカー: インプレス
  • 発売日: 2019/01/18
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

WSLのUbuntuにAWSCLIをインストールする

概要

Windows Subsystem for Linux上のUbuntuにAWSCLIをインストールしてみたいと思います。

手順

こんなかんじでやるとインストールできます。

pipをインストールする

curlでpipをもってきて

$ curl -O https://bootstrap.pypa.io/get-pip.py

実行する

$ python get-pip.py --user

.bash_profileにpipインストール場所のPATHを追加して

$ echo 'export PATH=~/.local/bin:$PATH' >> ~/.bash_profile

再読込させる

$ source ~/.bash_profile


AWSCLIをインストールする

pip install でAWCLIをインストールします。

$ pip install awscli --upgrade --user

無事にインストールできました!!!!!

$ aws --version
aws-cli/1.16.85 Python/2.7.15rc1 Linux/4.4.0-17134-Microsoft botocore/1.12.75



徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

  • 作者: ??部昭寛,宮?光平,菖蒲淳司,株式会社ソキウス・ジャパン
  • 出版社/メーカー: インプレス
  • 発売日: 2019/01/18
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

GCPのCloud Storageにファイルを格納してみる

概要

GCPのCloud Storageにファイルを格納してみたいと思います。

そもそもCloud Storageとは?

AWSでいうところのS3みたいなやつ。
安価でデータをいろいろ格納できて、可用性も高いよ。

バケットを作成する

まず、Cloud Storageのバケットを作成します。
コンソールでCloud Strageを開いて、「バケットを作成」を選択します。
f:id:kabegiwakun:20190108230829p:plain

作成するバケットの設定ができるのでバケットの名前、ストレージクラス、場所を適当に選んであげて作成してあげます。
f:id:kabegiwakun:20190108231034p:plain

バケットが作成できました。
まだなにも入っていない空の状態です。
f:id:kabegiwakun:20190108231329p:plain

バケットにファイル(オブジェクト)を格納する

バケットに格納するように適当なファイルをつくっておきます。

echo 'wahaha' > ./wawawa.txt

「ファイルをアップロード」を選択して先ほどつくったファイルをアップロードします。
f:id:kabegiwakun:20190108233803p:plain

無事格納することができました!
f:id:kabegiwakun:20190108234333p:plain

格納したファイルを選択することでファイルの中身をブラウザ上で見ることもできます。
f:id:kabegiwakun:20190108234527p:plain



おわり。

プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで

プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで

VirtualBoxとVagrantでWindowsにCentOS環境を構築してみる

https://upload.wikimedia.org/wikipedia/commons/8/87/Vagrant.png

Windowsのローカル環境にVirtualBoxとVagrantを利用してCentOS環境を構築してみたいと思います。

VirtualBoxのインストール

以下のURLにアクセスして
Downloads – Oracle VM VirtualBox

赤枠をクリックしてインストーラをダウンロードする。
f:id:kabegiwakun:20190107220635p:plain

インストーラを実行してネクストネクストで順にすすめていけばVirtualBoxのインストールは完了。
f:id:kabegiwakun:20190107220826p:plain

インストールできました!!!!
f:id:kabegiwakun:20190107221050p:plain

Vagrantのインストール

以下URLにアクセスして

Vagrant by HashiCorp

赤枠をクリックして
f:id:kabegiwakun:20190107221249p:plain

もっかい赤枠をクリックしてダウンロードする(いまどきはだいたい64bitだろう)
f:id:kabegiwakun:20190107221453p:plain

インストーラを実行してネクストネクストで順に進めていって
f:id:kabegiwakun:20190107221711p:plain

再起動すればVagrantのインストールが完了する。
f:id:kabegiwakun:20190107221908p:plain

CentOSのboxファイルをダウンロードする

CentOSのboxファイルをダウンロードします。
boxファイルとはOSのイメージファイル群のことです。

コマンドプロンプトでboxファイルをダウンロードしてきたいディレクトリに移動して以下コマンドを実行します。

C:\kabegiwa> vagrant box add centos/7

するとなにでつかうんだみたいなことをきかれるので3のvirtualboxを選択します。

==> box: Loading metadata for box 'centos/7'
    box: URL: https://vagrantcloud.com/centos/7
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop

Enter your choice: 3

初期設定をする

以下コマンドを入力します。

$ vagrant init

するとカレントディレクトリにVagrantfileというファイルができあがります。
そのなかのconfig.vm.boxという箇所以下のように書き換えてあげます。

config.vm.box = "centos/7"

CentOSを起動する

以下のコマンドを実行してCentOSを起動します。

C:\kabegiwa> vagrant up

VirtualBoxからCentOSにsshログインする

VirtualBoxを起動するとさきほど起動したCentOSが起動されていることがわかる。
f:id:kabegiwakun:20190107225842p:plain

ID: vagrant
Pass: vagrant

でsshログインすることができる。

おまけ コマンドプロンプトからログインする

VirtualBoxからではなく、コマンドプロンプトからもsshログインすることができます。
以下コマンドをいれてあげるだけです。

C:\kabegiwa> vagrant ssh

実践 Vagrant

実践 Vagrant

Macにgcloud(Cloud SDK)をインストールする

Google Cloudで利用するgcloudコマンドをローカルマシンのMacにインストールしてみます。

手順

ターミナル上で以下のコマンドを実行

途中でどこのディレクトリに保存するか?
本当にインストールしますか?
みたいなことを聞かれるので適当に回答すればOK

$ curl https://sdk.cloud.google.com | bash

シェルを再起動する

シェルを再起動させて設定を読み込ませる

$ exec -l ${SHELL}

環境を初期化する

以下コマンドを実行してgcloudの環境設定を行う

$ gcloud init

このコマンドを実行して対話型ですすんでいくと、許可設定しなきゃだめだよーみたいなことを言われてブラウザが開くので許可する
f:id:kabegiwakun:20181211125805p:plain

コンソールでgcloudの初期設定を行う

どのプロジェクトでgcloudを利用するかえらぶ

Pick cloud project to use:
 [1] articulate-ego-XXXXXX
 [2] Create a new project
Please enter numeric choice or text value (must exactly match list item): 1


どのリージョンとゾーンをデフォルトで利用するかえらぶ
ちなみに日本はasia-northeast-1 

Do you want to configure a default Compute Region and Zone? (Y/n)?  y

Which Google Compute Engine zone would you like to use as project
default?
If you do not specify a zone via a command line flag while working
with Compute Engine resources, the default is assumed.
 [1] us-east1-b
 [2] us-east1-c
 [3] us-east1-d
 [4] us-east4-c
〜〜〜省略〜〜〜
 [32] asia-northeast1-b
 [33] asia-northeast1-c
 [34] asia-northeast1-a
〜〜〜省略〜〜〜
Did not print [6] options.
Too many options [56]. Enter "list" at prompt to print choices fully.
Please enter numeric choice or text value (must exactly match list
item):  32

gcloudがインストールできる

できました!!!!!!

$ gcloud --version
Google Cloud SDK 227.0.0
bq 2.0.39
core 2018.11.30
gsutil 4.34

プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで

プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで

Pythonで70分とか25時とかそういうのを実現させる

概要

Pythonで70分を1時間10分にしたい。
Pythonで25時を翌日の1時にしたい。
そういうのを実現させる。

前提

前提として以下をやってあげています。

from datetime import datetime,time,timedelta

70分を1時間10分にしたい

1時間は60分なので60で除算してあげれば良い。
そのためにdivmodをつかってあげて商と余りを求めてあげる。
それをtime()で時刻形式にしてあげる。

動かしてみるとこんなかんじ

$ .hour.py
01:10:00

25時を翌日の1時にしたい

1日は24時間なので24で除算してあげれば良い。
そのためにdivmodをつかってあげて商と余りを求めてあげる。
それを現在時刻と加算してあげる。
加算するときはtimedelta()をつかってあげるとよい。

うごかしてみるとこんなかんじ

$ date
2018年 12月 8日 土曜日 22時11分01秒 JST

$./day.py
2018-12-09 23:11:04.832109


おわりに

なんだかんだ難しいことしようとしがち

独学プログラマー Python言語の基本から仕事のやり方まで

独学プログラマー Python言語の基本から仕事のやり方まで

Ansibleのモジュールを自作してみる

概要

Ansibleのモジュールを自分でつくってみて動かしてみたいと思います。

環境

Ansibleを動かす環境はこんなかんじ。
いたって普通の環境。
library/jisaku.pyが今回のキモの自作モジュール。

$ tree
.
├── inventories
│   └── hosts
├── jisaku.yml
└── library
    └── jisaku.py

自作モジュールについて

こんかいつくったモジュールはこんなかんじ。
パラメータでわたしたものにgood!ってつけてあげるだけのやつ。

実際に動かしてみる

playbookはこんなかんじ。
jisakuの箇所が自作モジュールになっている。

$ cat jisaku.yml
---
- hosts: localhost
  connection: local
  tasks:
    - jisaku:
        name: 'wawawa'

これをうごかすとこんなかんじになる
wawawa is good! となっていることがわかる。

$ ansible-playbook -i inventories/hosts  jisaku.yml -v
No config file found; using defaults

PLAY [localhost] ************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************
ok: [127.0.0.1]

TASK [jisaku] ***************************************************************************************************************************
ok: [127.0.0.1] => {"changed": false, "message": "wawawa is good!"}

PLAY RECAP ******************************************************************************************************************************
127.0.0.1                  : ok=2    changed=0    unreachable=0    failed=0

おわりに

公式のモジュールじゃあどうしてもできない場合はこうやって自分でつくるのもよさそう

Ansible実践ガイド 第2版 (impress top gear)

Ansible実践ガイド 第2版 (impress top gear)