As rookie

ルーキーインフラエンジニアがインフラのこと以外も結構書いてしまうブログ

bashコマンド(5日坊主)

  • この記事はsolo_advent_calender 2016年12月5日のものです。

こんにちは ショート advent calender5日目です。

bash使っている人多いと思います。

bashコマンドもあります。

man bash
bash は、標準入力やファイルから読み込んだコマンドを実行する、 sh 互換の
       コマンド言語インタプリタです。 bash には、Korn シェルや C シェ ル  (ksh
       や csh) の便利な機能も採り入れられています。

正確にはコマンド言語インタプリタだそうです。

bash -c で入力を文字列から読み込んでくれます。

# 同じ結果が返ってくる
$bash -c "ls"

$ls

ansibleでshellモジュールを利用するときに

---
shell: ls -la

とかしますが、shellモジュールでsedgrep などで文字を検索するときにコロン(:)が入っているとansibleではエラーになります。

これを

shell: bash -c "grep :"

とするとコロンもコマンドの一部として扱うことができます。

bash -l環境変数読みこみなので、pyenv等のルート意外のホームディレクトリにインストールされるコマンドも実行できます。

become: False
shell: bash -lc "pyenv versions"

bash周りのファイル群(4日坊主)

  • この記事はsolo_advent_calender 2016年12月4のものです。

こんにちは ショート advent calender4日目です。

man bash
-- 略 --
ファイル
       /bin/bash
              bash の実行ファイル。
       /etc/profile
              システム全体用の初期化ファイル。ログインシェルが実行します。
       ~/.bash_profile
              個人用の初期化ファイル。ログインシェルが実行します。
       ~/.bashrc
              対話シェルごとに実行される、個人用の起動ファイル。
       ~/.bash_logout
              個人用のログインシェル後処理ファイル。ログインシェルの終了時に実行されます。
       ~/.inputrc
              個人用の readline 初期化ファイル。
-- 略 --

.bash_profile.bashrc に何かを追記することはありますが、.bash_logout は使ったことがなかったので使ってみました。

vim ~/.bash_logout
# ~/.bash_logou
d=`date`
p=`pwd`
echo ${d} ${p} >> logout.log
echo "bye" 

ログアウト時に最後にいたディレクトリを追記していくものです。これぐらいしか思いつきません。

cat logout.log

2016年 12月 4日 日曜日 23:48:27 JST /home/mokicks

ansibleでpyenvいれる(3日坊主)

  • この記事はsolo_advent_calender 2016年12月3のものです。

こんにちは ショート advent calender3日目です。

ansibleでDjangoの開発環境を準備するために作りました。

pyenvで指定のバージョンのpythonをインストールするところまでです。

ディレクトリ構成はこんな感じです

pyenv/
├── files
│   └── bashrc
├── handlers
│   └── main.yml
└── tasks
    └── main.yml

bashrcをコピーする方式なので開発マシンに入ってbashrcを書き換えてもう一度実行すると初期状態にもどってしまうので、ファイルの存在を確認するようにしています。

tasks/main.yml

---
- name: clone pyenv
  become: False
  git: repo=git://github.com/yyuu/pyenv.git dest=~/.pyenv accept_hostkey=yes

- name: check bashrc
  become: False
  stat: path=~/.bashrc
  register: is_bashrc
  ignore_errors: yes

- name: copy bashrc
  become: False
  copy: src=bashrc dest=~/.bashrc
  notify: source bashrc
  when: not is_bashrc.stat.exists

- name: check python version {{ python_version }}
  become: False
  shell: bash -lc "pyenv versions | grep {{ python_version }}"
  register: result
  ignore_errors: yes

- name: install {{ python_version }}
  become: False
  shell: bash -lc "pyenv install {{ python_version }}"
  when: result|failed

- name: set global {{ python_version }}
  become: False
  shell: bash -lc "pyenv global {{ python_version }}"

handlers/main.yml

---
- name: source bashrc
  shell: bash -lc "source bashrc"

files/bashrc

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

export PYENV_ROOT="${HOME}/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
    export PATH=${PYENV_ROOT}/bin:$PATH
    eval "$(pyenv init -)"
fi

# User specific aliases and functions

group_varsのall等に

# バージョンを指定する
python_version: 2.7.11

を用意すれば

pyenvが開発環境にインストールされます。 あとはpipをインストールしてDjangoをpipでインストールすればDjangoを扱えるようになります。

この部分も後ほどansibleで書こうとおもいます。

2016年度solo advent calenderします

2016年12月1日から2016年12月25日まで毎日ブログ更新します。

継続力テスト。

12/1 mokicks.hatenablog.com 12/2 mokicks.hatenablog.com 12/3 mokicks.hatenablog.com 12/4 mokicks.hatenablog.com 12/5 mokicks.hatenablog.com 12/6 mokicks.hatenablog.com 12/7 mokicks.hatenablog.com

vimでESCキー以外でノーマルモードにする (1日坊主)

この記事はsolo_advent_calender 2016年12月1日のものです。

こんにちは ショート advent calender1日目です。

.vimrcにimap <キーバインド> <esc>

書けば完了

cd ~
vim .vimrc
#.vimrcの一番下に1行追加
imap <c-f> <esc>

これで、ctrl + f を押せばノーマルモード(何もしてないモード) に戻ります。

ctrl + j の方が押しやすそうと思っていたが、どうやらインサートモード中に ctrl + j で改行できるっぽい。

というかimap の記述す前に試してたら改行された!

クリスマスまで残り24日

ansibleのmysql_replicationモジュールでエラー??

ansibleのmysql_replicationモジュールで

Sending passwords in plain text without SSL/TLS is extremely insecure

というエラーがでました。

結論:解決方法は2.2.0 以上にバージョンをあげることです。

以下は戦った記録

戦記

いや、ちょっと待った。これMySQL上だとWarningだぞ。間違ってないぞ?ということで

MySQL レプリケーション」とかで調べてみると

MHAにはmasterとslaveがお互いに公開鍵認証できる状態じゃないといけないみたいな情報がありますが、これはMHAの場合らしいので単純なレプリケーションでは必要なさそう。

恐ろしいのはansibleから返ってくるエラーメッセージ

changed : false faild : true msg : Sending passwords in plain text without SSL/TLS is extremely insecure

msgがエラーメッセージじゃないのにfaild : true

なんやねんMySQL

って思っていると

こういう自分の中で解決できないことは自分を疑うことですね。

ansibleのissueに同じことがでてきているってことはansible側の普通のバグっすね

github.com

上記issueのリンクではワークアラウンドを示している部分もありますが

github.com

でマージされている情報もあるので

最新に上げればとりあえず解決していることが確認できます。

よってバージョン上げることがもっとも単純な解決方法だということがわかります。

トラブルシューティング能力をもっとあげていきたいですね。