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モジュールでsed
やgrep
などで文字を検索するときにコロン(:)が入っていると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で書こうとおもいます。
Ansibleで変数のデバッグ(2日坊主)
この記事はsolo_advent_calender 2016年12月2日のものです。
こんにちは ショート advent calender2日目です。
- debug: var=変数名
でできます。{{ }} は必要ありません。
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
だぞ。間違ってないぞ?ということで
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側の普通のバグっすね
上記issueのリンクではワークアラウンドを示している部分もありますが
でマージされている情報もあるので
最新に上げればとりあえず解決していることが確認できます。
よってバージョン上げることがもっとも単純な解決方法だということがわかります。
トラブルシューティング能力をもっとあげていきたいですね。