2013/10/14

vim-enhanced を yum で入れる際に注意すること

vagrantbox.es な Fedora19 でのログ。
Fedora19 でのデフォなのか、 box 化された Fedora19 の設定だったのかは謎だけれど。


vim が vim-minimal だったので vim-enhanced を入れようと
$ yum install vim-enhanced
すると vim-common が vim-minimal と conflict とか出てくる。
Transaction check error:
  file /usr/share/man/man1/vim.1.gz from install of vim-common-2:7.4.027-2.fc19.x86_64 conflicts with file from package vim-minimal-2:7.3.1314-1.fc19.x86_64

ってな訳で vim-minimal を消す
$ yum erase vim-minimal
そうすると依存の関係で sudo が消える。 たぶん visudo とかの関係。
Running transaction
  Erasing    : sudo-1.8.6p7-1.fc19.x86_64              1/2
warning: /etc/sudoers saved as /etc/sudoers.rpmsave
  Erasing    : 2:vim-minimal-7.3.1314-1.fc19.x86_64    2/2
  Verifying  : sudo-1.8.6p7-1.fc19.x86_64              1/2
  Verifying  : 2:vim-minimal-7.3.1314-1.fc19.x86_64

sudo を erase すると /etc/sudoers が消えるので /etc/sudoers.rpmsave にバックアップされるみたい。
なので vim-enhanced を入れる時に sudo も入れて、 /etc/sudoers を元に戻すと元通りのはず
$ yum install vim-enhanced
$ yum install sudo
$ mv /etc/sudoers.rpmsave /etc/sudoers
これで sudo できるし vim も enhanced になってめでたしめでたし。
というか sudo 消えるのこわい。

実践Vim を読んだ

実践Vim を読みました。
買って一ヶ月くらいで読んだ様子。
たぶんしばらく放置して数週間くらいかけて読んだよーな。

内容ですが、 Vim の基本機能に関する TIPS 集みたいな感じでした。200個くらい TIPS がある。というか全ての項目が TIPS としてまとめられてる。


発見したことはいくつかあって、憶えてるのだと

  • Expression Register
  • / した後に :s//hoge/ すると置換のパターンが最後の / と同じになる
  • :global が便利そう(使ってなかった)
  • :spell している状態でスペルミスの部分を修正できる(z= とか)
あといくつかあったのですが、結構多くて忘れてる。
大量の TIPS があるので後から見直せば良いのかなー、とか。


あと、読んでて思ったこと。
Vim の基本機能の解説なので、割と知ってる内容でした。
なのと、自分で勝手に使ってる Vim な方法と違う方法が書かれていて違和感。
別の方法もあるよー、的な感じですがこう、読んでて「私ならあーする」みたいなのが脳内に出てきてこの辺は静かに読んでない感。

大量の TIPS 群なので、実際に手を動かしながらやると強力さが分かったりするものもあるんだろーな、と思いながら紙でずっと読んでました。
私としては、使えるものをいくつか拾えたら良いのかな、ってスタンスなのでたぶん使えそうなやつを使うくらい。自分の使いたいように使えば良いと思う。(投げやり)

あと、プラグインの解説とかはメインでは無くて、標準の Vim じゃできないことも、これを入れれば、できるんですよ、みたいな話は無し。コラムにちょろっとあるけれど。 Kana さんと Tim Pope さん流石っぽい。 あと KoRon さんとか mattn さんとか名前が載ってたり。
便利なプラグインを入れよう、とかそういう役目は Vim テクニックバイブル 担当そうですね。

基本の機能解説には良いと思います。
個人的には基本的機能解説は 入門vi を読んでしまったのでそっちが印象強いですが。
Vim を使うならこっちから読んでも良いのかな、でも入門viの方が薄いし。うーん。
とりあえず、入門vi (or|and) 実践Vim からの Vim テクニックバイブル の流れが良さそう。

2013/10/11

Vagrant で box が add できない

時系列は前後するのですが、 Vagrant 導入時にちょっと引っかかった内容。

Vagrant は ruby base だと聞いていたので導入は
$ gem install vagrant
でやったところ、入るのは 1.0.x 系列らしい。

1.0.x 系列で CentOS の最新版や Fedoraの最新版の box を add しようとすると、ダウンロード終了後の展開時に
Failed to untar the box file. This is usually because you're
attempting to add a box that isn't a valid box file. Please
double check that the box file is properly packaged.
とか言われて落ちる。
VAGRANT_HOME の関係で、ホームディレクトリでやると良い  とか それでもダメだったからバージョン低い box でやった とかいろいろ対策があるみたい。
私は前者はダメで、後者の方のバージョンが低い CentOS の box を指定すれば add できた。

実際何が原因だったかと言えば、 vagrant のバージョンでした。最新だと問題無し。
Vagrant 公式の最新は 1.3.4 で、これは gem からだと入らないみたい。
dmg を落としてきてインストールする必要がある。

インストールした Vagrant は /Applications/Vagrant/bin くらいに command があるけれど /usr/bin に symlink が貼られている様子。
なので、 gem の方をアンインストールして dmg な /usr/bin/vagrant の方を優先するようにすると実行できる vagrant が 1.3.4 に。
1.3.4 だと fodora19 の box も問題無く add できた。
gem の方を uninstall しなくても良いかもしれないけれど、パスの優先度を変えたり追加するのも面倒だったので gem の方を消すことで対処。

とりあえず最新の fedora を box 化するような人が古い Vagrant 使うはずがなかったんやー、みたいなオチで一つ。

Vagrant + Puppet で Fedora 19 に MySQL を入れる

MySQL な環境を構築しよう、ということになったけれど、どうせなので Vagrant でやることに。
と思ったら非常にいろいろハマったのでメモ。

環境

  • OS X Mountain Lion
  • Vagrant 1.3.4

Vagrant のインストール

Vagrant のサイト から最新な 1.3.4 をインストール。
ちなみに /usr/bin/vagrant くらいにシンボリックリンクが貼られるので、 rbenv な vagrant は uninstall した。


Fedora 19 を入れる

Vagrantbox.es から最新な Fedora19 を使うことに。
$ vagrant box add fodora-19 https://dl.dropboxusercontent.com/u/86066173/fedora-19.box
これで box がダウンロードされる。
box は直接起動する訳じゃなくて、
$ vagrant up
した時にコピーされて起動するみたい。
なので
$ vagrant destroy
しても box そのものは消えない。



Puppet で MySQL を入れる

入れようと思ったら大量にハマるなど。
以下に導入ログとトラブルシュートなログ類。

Puppet の Install

$ vagrant plugin install puppet
くらい。 gem からでも入るっぽいけれど、vagrant な例に習って gem の puppet は uninstall した。

Puppet の設定

Vagrantfile に書かれているやつをコメントアウトする。
  config.vm.provision :puppet do |puppet|
    puppet.manifests_path = "manifests"
    puppet.manifest_file  = "mysql.pp"
  end
とか。
mysql.pp とかはマニフェストの名前。何でも良いはず。
ディレクトリ構成は
.
├── Vagrantfile
└── manifests
    └── mysql.pp
みたいな感じになる。
この状態で mysql.pp に設定を書いていく感じ。

 

Puppet の実行

puppet で環境を構築するのは provision すると良いみたい。
up の時に provision も実行するなら
$ vagrant up --provision
しないなら
$ vagrant up --no-provision
1.3 系だと up は初回は provision が走って、次回以降は走らないのがデフォらしい。
ちなみに up してる時にも
$ vagrant provision
で provision が実行されて puppet が走る。



エラーログ

ここからエラーログ

IP アドレスが取得できないっぽい

$ vagrant provision
した時に
Running Puppet with mysql.pp...
Could not retrieve macaddress: undefined method `each_line' for nil:NilClass
Could not retrieve macaddress: undefined method `each_line' for nil:NilClass
Could not retrieve macaddress: undefined method `each_line' for nil:NilClass
Could not retrieve ipaddress6: undefined method `scan' for nil:NilClass
Could not retrieve netmask: undefined method `split' for nil:NilClass
Warning: Could not retrieve fact ipaddress
とか怒られる。
IP が見えてないっぽい。
fedora19 には最初から ifconfig とかが入ってないらしいので
$ yum install net-tools
しておく必要があるみたい。
この辺も manifest に書いておくと怒られない。
ちなみにこう怒られたのは yum update の時。

hostname と DNS 周りが変らしい

warning: Could not retrieve fact fqdn
とも言われた。
この辺は hostname が fqdn に対応してない(のかな?)っぽいのと、dnsな設定が変らしい。
どうやら VM の domain が適切に設定できてないとダメらしい。
/etc/resolve.conf に domain な記述が無いといけないらしい。
んで、 resolve.conf は vagrant が勝手に設定するらしいので、実行するホストの環境によっては設定されなかったりするっぽい。
generated by NetworkManager とか書かれてたので vagrant 側じゃなくて fedora 側が勝手に作ってるのかもしれないけれど。
無理矢理 /etc/hostname に hostname を書いて、 /etc/resolve.conf に domain を書くと出ない。
ちなみに hostname と dnsdomainname コマンドがおかしい時に出てくるエラーらしい。
あと vagrant ssh して
$ factor | grep fqdn
すると、エラーが出る方には fqdn な値が無かったり。
この辺設定できるとエラーは出ないのかもしれない。

そもそも MySQL が Fedora19 に無い

$ yum install mysql
とかがダメで
$ yum intall community-mysql
とからしい。
しかも接続してみると MySQL じゃなくて MariaDB とか出てくる。
調べてみると fedora19 から MySQL の default が MariaDB だとか。


Vagrantfile と manifests/mysql.pp

書き方はググりながらだったので省略するとして、最終的にできた Vagrantfile と manifest はこんな感じ。
mysql をインストール + 有効化とパッケージのアップデートをしてくれます。
あと hostname の設定。


最終的に

$ vagrant up
$ vagrant provision
で起動と環境構築をしてくれるようになりました。
便利だけれど実行できるようになるまで大分ハマった。
この辺ささっとできると良いのかなーうーん。

2013/09/29

git勉強会 in Okinawa に行ってきた

2013/09/28 に git勉強会 in Okinawa があったので紛れ込んできました。
togetter は こんな感じ。


まずは git のハンズオン。資料はこんな感じでした。
ハンズオン形式は始めてでしたが、これは個人でやるタイプなのでひたすらもくもくでした。
割と見たことある内容なので資料を読んでました。
rebase で fixup にするとコメント無し squash にできそうなので便利そう。


次は @Tomohiro さんによる git を使った開発の話。

git は「複数人数で開発とかする上で使えそうなもの」であって、開発のスタイルとかに合わせて使っていこう、みたいな話とか。
例えば git-flow とか github-flow とかみたいに git を使うスタイルはいくつかあるらしくて、自分達に使えそうなものを取り入れていけば良いのでは的な話。
具体例として @Tomohiro さん達はスクラムしてたりします、とかとか言ってました。
github 使うなら huboard 使えばカンバン化できたりするよー、とかとか。
型に合わせるのも良いけれど必要なところだけ取ってけるともっと良いんだろーなー、とか思いましたまる。

あとは、環境な話とか。
vagrant を使えば環境構築のレシピをテキストベースで保存できる == git で管理可能ですよー、とか。
環境の依存とかも解決できるしロールバックもできるし良い感じそう。
packer を使って OS Install -> vagrant で上げて -> puppet でコマンドとかを入れる
とかしてるみたいです。
chef も良いけれど、 chef は割と厳密なファイル構成でファイルを書かないといけないらしくて、 puppet は単純な構成でも厳密な構成でもできるし良いよー、と。
とりあえずテキストベースで環境を構築できるしこうやって公開もできます、みたいな話。
便利そうなので次何か構築する時は使ってみたいなー、とか思ったり。


ハンズオンの二回目はコンフリクトの解消。
だけれど曰く「ちゃんとコミュニケーションできてたらコンフリクトなんて起きないよ」と。
ハンズオンでは積極的にコンフリクトして解消する作業。
「コンフリクトするのは怖くないよ」みたいな印象を持ってもらえば良いな、って形らしいです。

ちなみに、 rebase 派 と merge 派 は分かりあえないらしいです。
rebase は svn とかのユーザの感覚らしい。まっすぐなので。
merge はなんだろ。 mercurial かな。
ちなみに私は rebase からの merge --no-ff 派。
merge 時に conflict するのは面倒だけれど master に残すのは merge commit じゃないと面倒そうなので。
なので rebase -i で 1つにするほどでも無いけれど、master に 直 merge も嫌かなー、くらいのスタンス。



おまけで勉強会の時に飛んできた URL 群たち。

Git を学ぶ - @Tomohiro さんによる gist。 git を学ぶ上で便利そうな tips とか command とかの紹介。
あと、git-バルスでは「どうやるとgitがぶっ壊れるか学べるから良いよね」とのこと。
ちなみに加えて「まぁやらないですけれど」とのこと。

ChangeLog を支える英語 - yamane さんが投げてたURL。
commit message の先頭は大文字にしましょうねー、とか comment を書く上での tips 集。

git commit時のコメントを英語で書くための最初の一歩 | hiro345 - kanpe さんが投げてました。
これも tips 集みたいな感じ。ざっとしか目を通してません。
commit する前に確認すべきこと、みたいなのは良い感じだったよーな。

ChefとPuppetの比較 - こちらも kanpe さん。git じゃないけれど。実を言うとまだ目を通してない。


感想。

全体的にもくもくな感じでした。
コンフリクトのハンズオンの時に知らない人とあたればまた違ったのかもしれませんが。
というか私が知らない人と話してないだけか。
git そのものは知ってる知ってるみたいな反応してしまったし。でもほぼ個人でしか使ってないオチ。
個人的には仮想環境な話が聞けて良かったかなー、と。次に git を使った開発の実例とか。
git user (というかバージョン管理する人)が増えると良いなー、とか思いながらかんそーおしまい。