08 Jun 2014, 06:34

自分のデスクトップ環境の歴史を記録する!ansibleで設定ファイルをクラウド管理する方法

はじめに

いままで、このブログには自分がPCで実施した設定を技術メモとして書いてきた。

自宅でためした内容を会社でも実施することがかなりある。 どうせならば、ブログとして残すとともに、実行可能なスクリプトとして残したい。

ということで、構成管理ツールである、Ansibleを試すことにした。

今回は、ローカルマシン(ArchLinux)の設定を目的にして試してみます。

ちなみに、関連記事は以下。

Environment

<div class="outline-text-3" id="text-1-1">
  <ul class="org-ul">
    <li>
      Arch Linux
    </li>
    <li>
      Python 3.5
    </li>
  </ul>
</div>

Ansibleのインストール

Ansibleとは、いわゆる構成管理ツール。サーバの設定を自動化することができる。

sudo pacman -S ansible
<p>
  ちなみに、以下の方法ではbuildでエラーした。なんでかな?
</p>

<div class="org-src-container">
  <pre class="src src-language"># pip

sudo pacman -S python-pip sudo pip install ansible

easy_install

sudo pacman -S python-setuptools sudo easy_install ansible

Ansibleをつかってみる

ping

<div class="outline-text-3" id="text-3-1">
  <p>
    pingコマンドというのがあり、これでインストール後の疎通確認ができる。
  </p>

  <div class="org-src-container">
    <pre class="src src-language">mkdir ansible

cd ansible echo ‘localhost’ > host ansible localhost -m ping -i hosts

  <p>
    hostsというのはインベントリファイルという。 インベントリファイルに登録されたホストにのみansibleは実行可能。
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/yteraoka/ansible-tutorial/wiki/Inventory-File">Inventory File · yteraoka/ansible-tutorial Wiki</a>
    </li>
  </ul>
</div>

localで利用する

<div class="outline-text-3" id="text-3-2">
  <p>
    公式Docによると2つの方法がある。
  </p>

  <div class="org-src-container">
    <pre class="src src-language"># コマンドラインから --connection=localを設定

ansible-playbook playbook.yml –connection=local

playbookに以下を記述

  • hosts: 127.0.0.1 connection: local

gitを入れてみる

<div class="outline-text-3" id="text-3-3">
  <p>
    以下の記事を参考に、gitをインストールしてみる。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://qiita.com/itiut@github/items/e8b95ac9b9ea2a6ea701">AnsibleをUbuntuのローカルで使う &#8211; Qiita</a>
    </li>
  </ul>

  <div class="org-src-container">
    <pre class="src src-language">---
  • hosts: localhost user: tsu-nera tasks:

    • name: “git” pacman: name=git sudo: yes

コマンドラインから実行。-K オブションでパスワードを聞かれる。

ansible-playbook site.yml -i hosts -K

-i hostsは環境変数を設定することで省略可能。

export ANSIBLE_HOSTS=~/.ansible/hosts

/etc/sudoersで以下の一行を追加することで、-Kも書略できる。

# visudo
username ALL=(ALL) NOPASSWD:ALL

NTPの設定をしてみる

NTPの設定を自動化してみる。

実施手順

<div class="outline-text-3" id="text-4-1">
  <div class="org-src-container">
    <pre class="src src-language"># ntpのインストール

pacman -S ntp

ntpサーバへの接続設定

cp ntp.conf /etc/ntp.conf

  <p>
    /etc/ntp.confの内容は以下。
  </p>

  <div class="org-src-container">
    <pre class="src src-language"># With the default settings below, ntpd will only synchronize your clock.

#

For details, see:

- the ntp.conf man page

- http://support.ntp.org/bin/view/Support/GettingStarted

- https://wiki.archlinux.org/index.php/Network_Time_Protocol_daemon

Associate to public NTP pool servers; see http://www.pool.ntp.org/

server -4 ntp.nict.jp server -4 ntp1.jst.mfeed.ad.jp server -4 ntp2.jst.mfeed.ad.jp server -4 ntp3.jst.mfeed.ad.jp

Only allow read-only access from localhost

restrict default nomodify nopeer noquery restrict 127.0.0.1 restrict ::1

driftfile /var/lib/ntp/ntp.drift logfile /var/log/ntp.log

  <p>
    こうなった。以下を参考にしたけれども、途中でわからなくなった。 すみませんが、リンク先参照ということで。
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://gist.github.com/phillipuniverse/7721288">Set up NTP with Ansible, dedicating one as a timelord</a>
    </li>
  </ul>

  <div class="org-src-container">
    <pre class="src src-language">---

ArchLinuxの設定を書いてみる

<div class="outline-text-3" id="text-4-2">
  <p>
    ArchLinuxで利用するツールをyamlファイルで管理。
  </p>

  <div class="org-src-container">
    <pre class="src src-yaml"><span style="color: #a9a9a9;">---</span>

まとめ

デスクトップをプレーンテキストでバージョン管理したい。

dotfilesで設定を管理することを、一歩おしすすめて、OS自体を管理したい。

調べながらなので、今回の設定は時間がかかり、またpacmanくらいしかつかいこなせていない。 けれども、これからこのdotansiblesも成長させていく。 ansibleはとてもシンプルな仕様なので、覚えるのも時間がかからないはずだ。

調べてみると、dotfilesを管理するようにansibleでdesktopを管理するも流行ってる?

dotfilesと同じように、少しずつ自分の成長過程をプレーンテキストで管理して記録していく。

BookMarks

公式Doc

<div class="outline-text-3" id="text-6-1">
  <ul class="org-ul">
    <li>
      <a href="http://docs.ansible.com/index.html">Ansible Documentation — Ansible Documentation</a>
    </li>
  </ul>

  <p>
    日本語訳
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/shkumagai/ansible-doc-ja">shkumagai/ansible-doc-ja</a>vv
    </li>
  </ul>
</div>

チュートリアル

<div class="outline-text-3" id="text-6-2">
  <ul class="org-ul">
    <li>
      <a href="http://yteraoka.github.io/ansible-tutorial/">Ansible チュートリアル | Ansible Tutorial in Japanese</a>
    </li>
    <li>
      <a href="http://apatheia.info/blog/2013/04/06/about-ansible/">構成管理ツール Ansible について &#8211; apatheia.info</a>
    </li>
    <li>
      <a href="http://qiita.com/seizans/items/54da2077ac8e2dcf5d6f">vagrant &#8211; Ansible コトハジメ &#8211; Qiita</a>
    </li>
    <li>
      <a href="http://demand-side-science.jp/blog/2014/ansible-in-wonderland-01/">不思議の国のAnsible – 第1話 – DSS Tech Blog</a>
    </li>
    <li>
      <a href="http://tdoc.info/blog/2013/04/20/ansible.html">ansibleを使ってみる — そこはかとなく書くよん。</a>
    </li>
    <li>
      <a href="http://docs.ansible.com/pacman_module.html">pacman &#8211; Manage packages with pacman — Ansible Documentation</a>
    </li>
    <li>
      <a href="http://d.hatena.ne.jp/akishin999/20130815/1376520672">Ansible の Playbook を使ってみる &#8211; akishin999の日記</a>
    </li>
    <li>
      <a href="http://www.infiniteloop.co.jp/blog/2013/08/ansible/">はじめてAnsibleを使う人が知っておきたい7つのモジュール</a>
    </li>
  </ul>

  <p>
    ローカルで利用する。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://cloverrose.hateblo.jp/entry/2013/09/07/112153">Ansibleをローカルで使ってみた &#8211; cloverrose&#8217;s blog</a>
    </li>
    <li>
      <a href="http://qiita.com/itiut@github/items/e8b95ac9b9ea2a6ea701">AnsibleをUbuntuのローカルで使う &#8211; Qiita</a>
    </li>
  </ul>

  <p>
    Ansibleの哲学・アーキ。
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://tdoc.info/blog/2014/01/20/ansible_beyond_configuration.html">Ansibleのアーキテクチャー: 構成管理を超えて — そこはかとなく書くよん。</a>
    </li>
  </ul>

  <p>
    ansible bestpractice.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://docs.ansible.com/playbooks_best_practices.html#always-name-tasks">Best Practices — Ansible Documentation</a>
    </li>
  </ul>
</div>

その他

<div class="outline-text-3" id="text-6-3">
  <ul class="org-ul">
    <li>
      <a href="http://qiita.com/advent-calendar/2013/ansible">Ansible Advent Calendar 2013 &#8211; Qiita</a>
    </li>
  </ul>
</div>