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
で起動と環境構築をしてくれるようになりました。
便利だけれど実行できるようになるまで大分ハマった。
この辺ささっとできると良いのかなーうーん。