はじめに
この文章はAnsibleを用いて開発用個人PCをセットアップするときの手順・メモです。
Ansibleの情報は英語/日本語両方多く見られますが、個人用PCセットアップの例は少なかったので備忘録として残しておきます。
※他の方も言われてましたが、個人用PCのセットアップなんてめったにないので自動化するメリットは少ないです。現実逃避 勉強用としてやってます。
要約
- 毎回やっている個人用PCのセットアップが(ほぼ)自動化できた。
- でも個人用PCをセットアップする機会なんてあんまりない。
- でも自動化できて気持ち的に満足した。
環境・対象
まず私の個人用PC環境は以下です。
- Fedora 21
- Gnome 3
- Python 2.7.8
- Ansible 1.8.2
- ThinkPad X201
セットアップ対象は大きく以下です。(分類が微妙ですが)
- Fedora(yumでのインストールとか)
- Gnome
- Git/GitHub
- Vim
Playbook
今回はAnsibleの概要や仕組みについては詳しく言及しないです(できない)。
簡単にいうと構築手順をPlaybook(手順書)にYAML形式で書いていきます。イメージを示します。
---
- hosts: localhost
connection: local
tasks:
- yum: name=vim state=latest
・・・
hostsに構築対象、connectionに対象への接続方法を指定します。
今回の目的ではlocalhostにローカルアクセスします。(指定の仕方は他にもいろいろあります)
そしてtasksに手順を記載していくイメージとなっています。(ここではvimの最新バージョンをyum installしています)
1. Fedora
まず、Fedoraのセットアップです。設定内容については以下のサイトがとても参考になりました。
公式yumリポジトリからのインストール
yum moduleを使用します。
- yum: name={{ item }} state=latest
sudo: yes
with_items:
- yum-plugin-fastestmirror
- dconf-editor
- eclipse
- gcc
- gnome-tweak-tool
- gvim
- ibus-mozc
- python-pip
- vim
- wine
- xclip
- xvkbd
特に普通です。with_itemsを使用し、必要なソフトウェアを一括でインストールします。(items分ループされる)
python-pipでのinstall
次はpipでインストールする手順です。command moduleを使います。
- command: which vint
register: has_vint
ignore_errors: yes
- command: pip install vim-vint
when : has_vint.rc == 1
sudo: yes
もしインストールされていなかった時のみvim-vintをinstallしています。
Chromium
Chromiumは公式YUMリポジトリにはないので、reposファイルを取得してからyumしています。
- name: get chromium repo
get_url: url=http://repos.fedorapeople.org/repos/spot/chromium-stable/fedora-chromium-stable.repo dest=/etc/yum.repos.d/
sudo: yes
- name: get chromium repo pgp
get_url: url=http://repos.fedorapeople.org/repos/spot/chromium-stable/spot.gpg dest=/etc/pki/rpm-gpg/spot.gpg
sudo: yes
- yum: name=chromium state=latest
sudo: yes
Dropbox
Dropboxは自分でrepoファイルを用意してそれを使用しています。
[Dropbox]
name=Dropbox Repository
# TODO fedora21はまだ未対応っぽい
# baseurl=http://linux.dropbox.com/fedora/$releasever/
baseurl=http://linux.dropbox.com/fedora/20/
gpgkey=http://linux.dropbox.com/fedora/rpm-public-key.asc
enabled=0
- copy: src=dropbox.repo dest=/etc/yum.repos.d/ follow=yes
sudo: yes
- yum: name=nautilus-dropbox state=latest enablerepo=Dropbox
- command: dropbox
注意点が2つあります。
現時点(2015/2/25)で上記リポジトリはFedora 21に対応していないっぽいので元の記載だとエラーとなります。
baseurlのバージョン名を$releaseverから20に変更することでうまく行きます。
また、yum実行後にGUIでのインストールが必要となります。
最後にcommand moduleでGUIのインストールダイアログを起動しています(今後もちょいちょい自動化できない箇所が出てきます。困ります。)
Kindle for PC (Wine)
このあいだ、めでたくKindle for PCがリリースされました。Linuxは未対応ですがWineで問題なく使えます。
- stat: path="/home/oji/.wine/drive_c/Program Files (x86)/Amazon/Kindle/Kindle.exe"
register: has_kindle
- name: get kindle for pc for wine
get_url: url=http://www.amazon.co.jp/kindlepcdownload dest=/tmp
when: has_kindle.stat.md5 is not defined
- command: wine KindleForPC-installer.exe
when: has_kindle.stat.md5 is not defined
まず、stat moduleでインストール済みでないことを確認します。
次にexeファイルを取得します。
最後にwineにてインストールしています。
2. Gnome
次にGnome関係の設定を行っています。
- shell: LANGUAGE=C LC_MESSAGES=C xdg-user-dirs-gtk-update
homeの各ディレクトリを英語にします。(ここでも一部GUIでの操作が必要)
次、
- command: gsettings set org.freedesktop.ibus.general use-system-keyboard-layout true
- command: gsettings set org.gnome.desktop.input-sources sources "[('ibus', 'mozc-jp'), ('xkb', 'jp')]"
- command: gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:nocaps']"
- command: gsettings set org.gnome.desktop.wm.preferences button-layout ":minimize,maximize,close"
- command: gsettings set org.gnome.desktop.wm.preferences audible-bell false
- command: gsettings set org.gnome.shell enabled-extensions "['background-logo@fedorahosted.org', 'alternate-tab@gnome-shell-extensions.gcampax.github.com']"
- command: gsettings set org.gnome.shell favorite-apps "['gnome-terminal.desktop', 'chromium-browser.desktop', 'gvim.desktop', 'eclipse.desktop', 'wine-Programs-Amazon-Amazon Kindle-Kindle.desktop']"
- command: gsettings set org.gnome.settings-daemon.peripherals.touchpad touchpad-enabled false
- command: gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']"
- command: gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ name gnome-terminal
- command: gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ command gnome-terminal
- command: gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ binding Launch1
見づらいですが、お気に入りメニューの変更や、CapsLockキーをCtrlキーに変更するなどしています。
GUIだとdconf-editorで設定可能です。
どのようなキーを指定すればよいかはdconf-editorで検索するか、ググるとだいたいでてきます。
# TODO キー設定インポートが自動化できてない
- command: /usr/libexec/mozc/mozc_tool --mode=config_dialog
またしても自動化できない箇所がでてきました。(困ったものですね)
ibus-mozcのキー設定をインポートしたいのですが設定ダイアログの表示までしかできませんでした。
3. Git/GitHub
疲れてきました。ちょっと変なことやってます。
- command: ssh -T git@github.com
register: exit
failed_when: exit.rc not in [0, 1]
- user: name=oji generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa
when : exit.rc not in [0, 1]
- shell: cat /home/oji/ssh/id_rsa.pub | /usr/bin/xclip -sel clip
when : exit.rc not in [0, 1]
- pause: prompt="clipboard value to github.(https://github.com/settings/ssh)"
when : exit.rc not in [0, 1]
- command: ssh -T git@github.com
register: exit
failed_when: exit.rc not in [0, 1]
GitHubの初回セットアップ時にssh-keygenして公開鍵をGitHubに登録をすると思います。
できるだけ自動化したかったので以下の手順を考えてみました。
- GitHubにsshアクセスしてみる。
- NGだった場合、ssh-keygenする。
- 公開鍵の内容をクリップボードにコピる。
- AnsibleのプロンプトにGitHubのSSH設定ページリンクを表示する。
- 手動でリンク先でペーストする。
こんなところ自動化して意味あるのかは置いておきましょう。
次は、
- git: repo=git@github.com:assout/dotfiles.git
dest=/home/oji/development/dotfiles
update=no
- command: /home/oji/development/dotfiles/dotfilesLink.sh
- git: repo=git@github.com:yascentur/RictyDiminished.git
dest=/home/oji/development/RictyDiminished
update=no
- copy: src={{ item }}
dest=/usr/share/fonts/
force=no
with_fileglob: /home/oji/development/RictyDiminished/*.ttf
sudo: yes
GitHubで管理している自分のdotfilesを取得します。また、Rictyフォントの取得・設定もここでやっています。
4. Vim
疲れました。ここで最後です。
- git: repo=git@github.com:Shougo/neobundle.vim dest=/home/oji/.vim/bundle/neobundle.vim
- command: /home/oji/.vim/bundle/neobundle.vim/bin/neoinstall
前提として、.vimrcファイルはGitHubで管理していることとします。
そうすると、ShougoさんのNeobundleだけcloneしてきてインストールshell叩くだけです。(すごい簡単。ありがたい。)
一瞬はまった箇所として、もともとneoinstallを知らず、command: vim +NeoBundleInstall
としていたら
Ansibleの実行が止まってしまい終わらなくなってしまいました。(キー入力を待つような契機があったのかもしれません)
さいごに
作成したPlaybookはGitHubで管理します。
https://github.com/assout/ansible-playbooks
まとめると、
- 現実逃避楽しかった。
- 今までは手動で設定してテキストでメモしてたけど、コードとして残せることでバージョン管理できるので便利。