pig's diary

何でも忘れるので万年初心者ね

VirtualBox で VMDK 形式のディスク容量を大きくする

前提

  • VirtulaBox を使ってる
  • vm のディスクが VMDK 形式だ(vm情報のストレージ項目 に "box-disk1.vmdk" のような拡張子のファイル名があったらそう)
  • ディスク容量が足らなくなっちゃった

ディスクをリサイズする

VMDK形式を直接リサイズはできないようで、いちどVDI形式に変換してから戻しています。

$ cd ~/VirtualBox\ VMs/my_vm_01/
$ ls 
Logs
Snapshots
box-disk1.vmdk
my_vm_01.vbox
my_vm_01.vbox-prev

$ VBoxManage clonehd "box-disk1.vmdk" "cloned.vdi" --format vdi
$ VBoxManage modifyhd "cloned.vdi" --resize 16384    # 単位はMB
$ VBoxManage clonehd "cloned.vdi" "resized.vmdk" --format vmdk

ディスクを交換

  1. vm 一覧から my_vm_01 を選び設定画面を表示
  2. ストレージ
  3. "box-disk1.vmdk" を消して、"resized.vmdk" を参照させる

パーティションのリサイズ

どうやってもいいと思うのですが、パーティションのリサイズ専用のOSが紹介されていたので使ってみました。

  1. GParted http://gparted.sourceforge.net/download.php から gparted-live-xxx.iso をダウンロード
  2. my_vm_01 を gparted-live-xxx.iso で起動
  3. いろいろ適当に答える。debian風デスクトップになり、パーティション編集アプリが起動するので、GUIで広げて変更を適用。
  4. reboot

確認

します。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        16G  7.4G  6.9G  52% /

オッキくなってます。変換前の "box-disk1.vmdk" はもう要らないと思います。

お得情報

こちらから抜粋。VirtualBox は3つのディスク形式をサポートしているらしい。

http://www.atmarkit.co.jp/ait/articles/1009/30/news122.html

仮想ディスク・ファイルのタイプとしては、.VDI(業界標準のOVF:Open Virtualization Format規約に沿った仮想ディスク形式)か.VMDK(VMware形式)、.VHDVirtual PCやVirtual Server、Hyper-Vなどのファイル形式)をサポート

参考:

Soy の boolean 評価はどうなってる?

基本的には JavaScript の boolean 評価にならっているようです。

/**
 * ここからレンダリングをスタート。
 */
{template .soyweb}
  {call .myTemplate}
    {param myString: '' /}
    {param myBoolean: false /}
    {param myNumber: 0 /}
    {param myNullable: null /}
    // $myUndefined を引数なし(undefined)で呼んでみる
  {/call}
{/template}

/**
 * @param myString
 * @param myBoolean
 * @param myNumber
 * @param myNullable
 * @param? myUndefined
 */
{template .myTemplate}
  下のどれも出力されません。
  {if $myString} 出ません {/if}
  {if $myBoolean} 出ません {/if}
  {if $myNumber} 出ません {/if}
  {if $myNullable} 出ません {/if}
  {if $myUndefined} 出ません {/if}
{/template}

JavaScript書きにはとても使いやすい形ですが、空文字列や数字0には注意が必要。

しかし、?: 演算子の真偽評価は if とは違います。?: は isNonnull() を使う動きをします。上と同じ .soyweb から呼んだとして、こうなります。

{template .myTemplate}
  {$myString?:'boom'} // 空文字を出力
  {$myBoolean?:'boom'} // "false" を出力
  {$myNumber?:'boom'} // 0 を出力
  {$myNullable?:'boom'} // "boom" を出力
  {$myUndefined?:'boom'} // "boom" を出力
{/template}

もしかすると注意を要したのは私だけかも知れませんがね。ガハッハッハッハ!

ArchLinux の Wi-Fi 設定

Mac mini (Late 2012) にパーティション切ってArchLinux を入れている。Wi-Fi 設定の過程で試したことをメモしておく。-- 起動時に自動的にWi-Fi を探すよう加筆。

まず前提として、pacstrap などは Ethernet 経由で入れ、ネットに繋がるようにはしていた。aur パッケージを入れるための yaourt も持っていた。

その上で以下モジュールを入れる。

$ yaourt -S b43-fwcutter b43-firmware crda wireless-regdb
# reboot

再起動する(たぶん b43 のロードに必要)。

続いてwifi-menu設定のためのパッケージを入れる(/etc/netctl/xxx さえ作れればなくてもいいんだろうけど)。

$ yaourt -S dialog wpa_supplicant

必要なものは揃っているので、繋げるか確認。

# modprobe ath5k
# modprobe b43
# ip link  # デバイスIDは wlp2s0 だった
# ip link set wlp2s0 up
# wifi-menu  # これにより /etc/netctl/wlp2s0-networkname が作成される
# ping google.com  # 繋がっていたらOK

b43 はロード済みのはずだが、ath5k のあとに再度ロードしないと動かなかった。ロードの順番があるようだ。

接続が確認できたら、起動時に自動的にWi-Fiを探すよう設定する。起動時に必要なモジュールをロードさせ、Wi-Fiを探すデーモンを自動起動させる。

# echo ath5k > /etc/modules-load.d/ath5k.conf
# echo b43 > /etc/modules-load.d/b43.conf
# pacman -S wpa_actiond                    # netctl-auto のため
# systemctl enable netctl-auto@wlp2s0

これにより、先ほどwifi-menuで作った設定が自動的に使われるはず。reboot して起動後、すぐネットに繋がるだろうか?

# reboot

繋がれば成功。

参考:

Solr を導入

Solr を導入しました。インストール先のサーバに合わせたディレクトリ構成です。

このようなディレクトリ構成でインストールしていきます。

# ライブラリ本体(solr.war、jetty-*.jar、その他もろもろの jar 置き場所)
/usr/local/lib/solr-4.6.0

# シンボリックリンク
/usr/local/lib/solr -> /usr/local/lib/solr-4.6.0

# Solr Home ディレクトリ
/var/solr

# ログ(Solr Home からのデフォルト設定)
/var/solr/logs

# 各Solr コアのディレクトリ(Solr Home からのデフォルト設定)
/var/solr/solr/CORE_NAME

# コアごとのインデックスデータ(Solr Home からのデフォルト設定)
/var/solr/solr/YOUR_CORE_DIRECTORY/data

最新の Solr を落とします。24 November 2013 に 4.6.0 がリリースされたようです。

$ su -
$ cd /usr/local/lib
$ wget http://ftp.kddilabs.jp/infosystems/apache/lucene/solr/4.6.0/solr-4.6.0.tgz -O - | tar zxvf -
$ ln -s solr-4.6.0 solr

Solr の読み書き・実行は安全のため、root でなくに常に特定のユーザーにやらせます。ここでは www-data というユーザーを使います。

$ chown -R www-data:www-data solr solr-4.6.0

続いて、コアごとの設定ファイルを増やしていくためのディレクトリを用意します。

$ cd /var
$ mkdir solr

Solr のサンプルの中から、最もベーシックな設定例をコピーして利用します。

$ cp -R /usr/local/lib/solr-4.6.0/example/solr /var/solr/
$ chown -R www-data:www-data /var/solr
$ cd solr

コピーした設定では、collection1 というコアが 1個だけ宣言されています。まずはこれを起動してみます。

/var/solr/solr/collection1/conf/solrconfig.xml を編集し、ライブラリのパスを書き換えます。

75,76c75,76
<   <lib dir="../../../contrib/extraction/lib" regex=".*\.jar" />
<   <lib dir="../../../dist/" regex="solr-cell-\d.*\.jar" />
---
>   <lib dir="${solr.solr.lib}/contrib/extraction/lib" regex=".*\.jar" />
>   <lib dir="${solr.solr.lib}/dist/" regex="solr-cell-\d.*\.jar" />
78,79c78,79
<   <lib dir="../../../contrib/clustering/lib/" regex=".*\.jar" />
<   <lib dir="../../../dist/" regex="solr-clustering-\d.*\.jar" />
---
>   <lib dir="${solr.solr.lib}/contrib/clustering/lib/" regex=".*\.jar" />
>   <lib dir="${solr.solr.lib}/dist/" regex="solr-clustering-\d.*\.jar" />
81,82c81,82
<   <lib dir="../../../contrib/langid/lib/" regex=".*\.jar" />
<   <lib dir="../../../dist/" regex="solr-langid-\d.*\.jar" />
---
>   <lib dir="${solr.solr.lib}/contrib/langid/lib/" regex=".*\.jar" />
>   <lib dir="${solr.solr.lib}/dist/" regex="solr-langid-\d.*\.jar" />
84,85c84,85
<   <lib dir="../../../contrib/velocity/lib" regex=".*\.jar" />
<   <lib dir="../../../dist/" regex="solr-velocity-\d.*\.jar" />
---
>   <lib dir="${solr.solr.lib}/contrib/velocity/lib" regex=".*\.jar" />
>   <lib dir="${solr.solr.lib}/dist/" regex="solr-velocity-\d.*\.jar" />

${solr.solr.lib} という変数は私が適当につけた変数で、あとで Jetty を起動するときに引数を与えることで値が入ります。

Jetty は tomcat のようなサーブレットコンテナの1つで、他のプロジェクトに埋め込みやすいのが特徴のようです。今回は Jetty も含め "Solr サーバ" として扱いたいと思います。

Solr をサービスとして起動するための service スクリプトを書きます。以下のスクリプトは http://stackoverflow.com/a/8189312/804314 を元に作りました。あくまで「Solr 付属の Jetty で Solr を起動する」という書き方になっています。適宜書き換えてご利用ください。

それでは起動します。

$ sudo service solr start

Webブラウザで http://localhost:8983/solr にアクセスし、管理画面を確認してください。

f:id:piglovesyou:20131125160554p:plain

左下のプルダウンから、宣言されているコアを選択することができます。

次に、コアを増やしてみます。既存のコアをフルコピーし、data フォルダを削除してください。

$ cd /var/solr/solr
$ cp -R collection1 yasai
$ rm -rf yasai/data  # 既存のデータが大きいと大変かも・・
$ vi core.properties       # コアの名前を変更します。

コアの名前を書き換えます。

1c1
< name=collection1
---
> name=yasai

Solr を再起動します。

$ sudo service solr restart

新しいコア yasai が確認できます。

f:id:piglovesyou:20131125161920p:plain

以上で、Solr でコアを増やしていく準備ができました。あとは使うアプリに従って、コアごとに主に schema.xmlスキーマ定義) 、 data-config.xml(データインポート時のカラム対応やSQLなど) をいじるだけです。

ところで、各コアのディレクトリ内に共通化できそうなファイルがたくさんあります。これを外に出す方法がわかりませんでした。もし知っている方がいたら教えてください。

sed でマッチした行だけ標準出力する

マッチした行だけを出力するためには -n オプションと p コマンドの両方が必要。

$ sed -n -e '/nobody/p' /etc/passwd
nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false

そもそも sed は、取り込んだ全てのデータを標準出力するデフォルト挙動がある。それを -n オプションによって抑制することができる。これとは別に、p コマンドはマッチした行を出力する。

参考: SoftwareDesign 2013年9月号

arch, gnome, terminal, vim, tmux, clipboard setup

arch 入れた。gnome 入れた。ターミナルで vim 使う。* にヤンクする。クリップボードにコピーされない。悲しい。

$ vim --version
...
-clipboard
-xterm_clipboard
...

コピーされそうな気配が無い。オプションを足して、コンパイルしなおす。

クリップボードオプション有りで Vim をコンパイルする

$ sudo abs extra/vim
$ cd /var/abs/extra/vim  # 私は /var/abs 配下で一般ユーザーに編集権限を持たせてます

abs 最高。tarball 触りたくない。

.. vim-build .. ./configure らへんにコンパイルオプションを追加する。

$ vi PKGBUILD
...
    --with-x \      # これを追記しました
    --with-gnome \  # これを追記しました

makepkg でコンパイル。-s は依存解決を含める。-i はそのままインストールの「イ」。

$ makepkg -s -i

古いバイナリをきれいさっぱり置き換えてくれる感じがすごくいい・・

$ vim --version
...
+clipboard
+xterm_clipboard

ヨッシャー。

ここまでで、vim の * レジスタが X のクリップボードと仲良くなってるはず。(vim の clipboard オプションに unnamed が必要)

tmux のコピーモードを Vi にし、コピーしたものをクリップボードにつっこむ

つづいて tmux で vim みたいなコピーができるようにもする。tmux は最近使い始めたターミナル系便利ツール。べんり。

要るもの。

$ sudo pacman -S tmux xclip

tmux が 1.8 以上であることを確認。でも arch を使っているとパッケージが古いと感じることが無い。debian とは違う。

$ tmux -V
tmux 1.8

.tmux.conf を編集。

$ vi ~/.tmux.conf

# emacs じゃなくて vi モードを使います
set-window-option -g mode-keys vi

# コピー開始を Vim のヴィジュアルモード開始みたいにします
bind-key -t vi-copy 'v' begin-selection

# コピー終了を Vim のヴィジュアルモードヤンクみたいにします ついでに内容を X のクリップボードに突っ込みます
bind-key -t vi-copy 'y' copy-pipe "xclip -i -selection clipboard"

# スペースキーのコピー開始を unbind します
unbind -t vi-copy Space

# お好みで。
# unbind -t vi-copy Enter

tmux で config をリロードする(PREFIX + :source-file ~/.tmux.conf)。 するとコピーモード開始後(PREFIX + [ )、画面をVim のように動き回れるではないか。/ で検索もできるし、v で選択開始、y でコピーもできるではないか。ヨッシャーもうこれ。