はじめに
この文章は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:localhostconnection:localtasks:-yum:name=vim state=latest・・・
hostsに構築対象、connectionに対象への接続方法を指定します。
今回の目的ではlocalhostにローカルアクセスします。(指定の仕方は他にもいろいろあります)
そしてtasksに手順を記載していくイメージとなっています。(ここではvimの最新バージョンをyum installしています)
1. Fedora
まず、Fedoraのセットアップです。設定内容については以下のサイトがとても参考になりました。
* Fedoraのインストール直後にやることまとめ - ひっそりとなんかする
* Fedora 21をインストールした後の環境設定まとめ
公式yumリポジトリからのインストール
yum moduleを使用します。
-yum:name={{ item }} state=latestsudo:yeswith_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 vintregister:has_vintignore_errors:yes-command:pip install vim-vintwhen:has_vint.rc == 1sudo:yes
もしインストールされていなかった時のみvim-vintをinstallしています。
Chromium
Chromiumは公式YUMリポジトリにはないので、reposファイルを取得してからyumしています。
-name:get chromium repoget_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 pgpget_url:url=http://repos.fedorapeople.org/repos/spot/chromium-stable/spot.gpg dest=/etc/pki/rpm-gpg/spot.gpgsudo:yes-yum:name=chromium state=latestsudo: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=yessudo: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 wineget_url:url=http://www.amazon.co.jp/kindlepcdownload dest=/tmpwhen:has_kindle.stat.md5 is not defined-command:wine KindleForPC-installer.exewhen: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.comregister:exitfailed_when:exit.rc not in [0, 1]-user:name=oji generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsawhen:exit.rc not in [0, 1]-shell:cat /home/oji/ssh/id_rsa.pub | /usr/bin/xclip -sel clipwhen: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.comregister:exitfailed_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.gitdest=/home/oji/development/dotfilesupdate=no-command:/home/oji/development/dotfiles/dotfilesLink.sh-git:repo=git@github.com:yascentur/RictyDiminished.gitdest=/home/oji/development/RictyDiminishedupdate=no-copy:src={{ item }}dest=/usr/share/fonts/force=nowith_fileglob:/home/oji/development/RictyDiminished/*.ttfsudo: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
まとめると、
- 現実逃避楽しかった。
- 今までは手動で設定してテキストでメモしてたけど、コードとして残せることでバージョン管理できるので便利。