猫とアップルパイ

インフラエンジニアをやってます!エンジニアってむずかしいよね。

ansible 実行時に tmp ファイルに権限がないって怒られて失敗する

問題

rundeck から ansible 実行時に以下のエラーで ansible が失敗する。

Failed to set permissions on the temporary files Ansible needs to create when becoming an unprivileged user (rc: 1, err: chown: changing ownership of `/tmp/ansible-tmp-1539668029.49-46797233464078/': Operation not permitted
chown: changing ownership of `/tmp/ansible-tmp-1539668029.49-46797233464078/command.py': Operation not permitted
}). For information on working around this, see https://docs.ansible.com/ansible/become.html#becoming-an-unprivileged-user

このエラーは、 以下のように ssh ユーザ(ssh_user) と become-user (exec_user)で別のユーザを設定したときに発生する。 以下のように ssh ユーザ(ssh_user) でそのまま ansible 実行した場合はこのエラーは発生しない。

ansible -i <inventory_file> <hostname> -u <ssh_user >-m shell -a "git clone git@github.com:maomaomaopan/test_repo.git" --become-method sudo --become-user exec_user

調べてみると、いくつか同様の自称でバグレポートが。 https://github.com/ansible/awx/issues/389 https://github.com/ansible/ansible/issues/35089

対応手順としては、エラーメッセージにかいてある通り、以下ページのとおりにすればよかった☺ https://docs.ansible.com/ansible/latest/user_guide/become.html#becoming-an-unprivileged-user

解決方法

  • パイプラインを有効にする
    • ansible.cfg で以下のように記述して pipelining を有効にする(デフォルトでは無効)
    • こうすることで、 タスク実行時Ansibleによって生成されたPythonスクリプトをホストにコピーするのではなく、SSHのセッションにパイプして実行するので、今回問題になった、 /tmp 下にファイルを配置しないのでエラーが発生しなくなる
    • さらに、ansible 実行が高速化する
      • requiretty を無効にする必要がある

ansible.cfg

[defaults]
pipelining = True

rundeck プロセス再起動してもう一度ジョブ実行してもなぜか同様のメッセージでエラーになる。 まだ /tmp 下にファイル配置しているようだ。

  • /tmp 下の一時ファイルを誰でも書き込み可能にする
    • ansible.cfg で以下のように記述して、 ansible が実行するスクリプトを、全ユーザに読み取り権限付与する。(デフォルトでは無効)
      • Ansible2.1からは管理者権限がないユーザでは、リモートに配置するスクリプトにアクセスできなくなった。このパラメータを設定することで、以前のバージョンのように、管理者権限がないユーザでも実行できるようになる

ansible.cfg

[defaults]
allow_world_readable_tmpfiles = True

根本解決にはなってないけどいったんこれで対応しておわり。

rundeck サーバ構築でハマる一覧

  • rundeck の DB 接続設定
  • DB サーバの文字コード設定
  • まとめ

最近ジョブスケジューラとして rundeck がお気に入りでよく使用している。
複数バッチを順番に実行できるワークフローモードなどがあるので、今までは crontab で実行していた定期実行バッチも rundeck に移行している。
ansible 実行などのインフラプロビジョニングも rundeck で簡単に実行〜テストまで一連のジョブにして実行できるのでとても便利。
rundeck とは Linux でも Windows でも動く java ベースの OSS ツール。
わたしは Linux でしか稼働させたことがないが、サーバ構築時に何回もハマったことをメモしておく。

続きを読む

CentOS7系でLVM拡張コマンドが変わってた

 

最近になってようやく7系OSさわりはじめて、

いろいろはまってるけどそのうちのひとつ。

さようなら resize2fs。

ディスクの割り当てを増やし、いつも通りの手順で PV の拡張、 LV の拡張まで行い、

ファイルシステムの拡張を 6系同様  resize2fs コマンドで行おうとしたら下記のようなエラーに。 

[root@localhost ~]# resize2fs /dev/hoge/VolGroup
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block while trying to open /dev/hoge/VolGroup
Couldn't find valid filesystem superblock.

えっっっ

 

xfs とかオプション付与するのか??など調べた結果。

7系OS からは標準ファイルシステムが ext  → xfs に変更になりましたが、

その関係で、ファイルシステム操作系コマンドもかなり変更になったようす。

ファイルシステムの拡張は xfs_growfs コマンドで行うようです。

 

ということで xfs_growfs コマンドで行ったところ無事にうまくいきました。

よかった〜

[root@localhost ~]#xfs_growfs /dev/hoge/VolGroup
meta-data=/dev/hoge/VolGroup isize=512 agcount=4, agsize=1964032 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=7856128, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=3836, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 7856128 to 10469376

参考

今から始めるRHEL 7 第2回 標準ファイルシステムとなったXFS | NTTデータ先端技術株式会社