Skip to content

Vagrant 起動時の共有フォルダ周りで Protocol error

Vagrant 起動時の共有フォルダ周りで Protocol error published on Vagrant 起動時の共有フォルダ周りで Protocol error へのコメントはまだありません

症状

vagrant up で起動時に、共有フォルダを設定するところで、以下のようなエラーとなる。

==> default: Mounting shared folders...
default: /vagrant => /Users/kazu/Documents/workspace/foo
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant

The error output from the command was:

/sbin/mount.vboxsf: mounting failed with the error: Protocol error

環境

  • Host: Mac
  • Guest: Linux (Ubuntu 14.4)
  • Vagrant 2.2.2

原因と解決方法

エラーメッセージでググると、色々な原因でこのエラーが発生しうるが、自分の場合、`/home/vagrant` 以下に `vagrant` という名前で `/vagrant` へのシンボリックエラーがあったのが原因。

vagrant@vagrant-ubuntu-trusty-64:~$ ls -l /home/vagrant/vagrant
lrwxrwxrwx 1 vagrant vagrant 8 Dec 28 15:18 /home/vagrant/vagrant -> /vagrant

このシンボリックリンクを削除して `vagrant reload` で問題は解消した。

Vagrant のこの issue が参考になった。

このエラーがでるその他の可能性

  • VirtualBox Guest Addition が正しくインストールされていない、壊れている
  • 共有フォルダの設定が間違っている
  • などなど

logrotateでcopytruncateしてもサイズが大きいまま

logrotateでcopytruncateしてもサイズが大きいまま published on logrotateでcopytruncateしてもサイズが大きいまま へのコメントはまだありません

logrotateには色んなオプションがある。(logrotateが何をするツールかはググって下さい)。そのうちの1つに copytruncate というものがある。動作としては以下の通り。

  • 対象ログがa.logだとすると、それを a.log.0 あるいは a.log-yyyymmddにコピー
  • a.logをtruncate (内部的には cp /dev/null /path/to/a.log みたいな処理)

ログ・ファイルのサイズが大きいままになる問題

ログファイル名は a.log とする。logrotate の設定で copytruncate になっているとすると、ローテートの際に、前述の通り a.log が a.log.0 にコピーされる。a.log が 100KBだとすると、a.log.0 は100KBで、その後 a.log は truncate されて 0バイトになるはず。

だが、以下の様な現象が起こる場合がある。

  • a.log が a.log-0 にコピーされる (a.log-0 のサイズは100KB)。
  • a.log が truncate される。
  • a.log のサイズが 100KBに戻る。

a.log の最初の100KBはNULL byte(\0)で埋められ、その後からログが書き込まれる。

想像がつくと思うけど、ログファイルに書き込むプロセスが保持しているファイルポインターが100KBの位置のままの場合、a.log が truncate されてサイズが0になっても、その後のログ書き込みで100KBの位置に書き込まれ、結果として最初の100KBがNULLで埋められる。

原因、解決方法

ログファイルを開く際に O_APPEND オプションが付いていない場合にこうした現象が起こる。シェル(sh や bash)の場合、

$ command > a.log

の場合、O_APPEND 無しでファイルが開かれるので、上のような現象が発生する。それに対して、以下の場合には問題が発生しない。

$ command >> a.log

ということで、シェルスクリプトからログファイルにログを書き込む際に > でリダイレクトをしている場合、logrotate の copytruncate で上のような問題が発生するので、 >> を使うようにすると良い。

なんで > と >> で挙動が違うかは、歴史的背景らしい。

参考

ググって見つけたこのページこのページが参考になった。

bashのドル記号の用法をいくつか

bashのドル記号の用法をいくつか published on bashのドル記号の用法をいくつか へのコメントはまだありません

bashではドル記号($)で色々な場面で使う(Bourne shellでも使うけど)。自分が知ってる範囲でまとめてみた。

変数の参照

基本中の基本なんで敢えて書く必要はないかも。

foo=1234       # 変数の定義
echo $foo      # 変数の参照
ary=(1 2 3)    # 配列の定義
echo ${ary[1]} # 配列の要素の参照
for e in ${ary[@]} .... # 配列全体の参照

Continue reading bashのドル記号の用法をいくつか

Mac OS X LionでLC_CTYPE: cannot change locale (UTF-8)とか言われる

Mac OS X LionでLC_CTYPE: cannot change locale (UTF-8)とか言われる published on Mac OS X LionでLC_CTYPE: cannot change locale (UTF-8)とか言われる へのコメントはまだありません

今更ながらMac OS X Lionにアップグレードした。

いつも通り仕事用のサーバーにログインしたら以下のようなエラーメッセージが出た。

bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8)

LC_TYPEがおかしいらしいので、 一度ログアウトしてMac側のターミナルで以下の通り確認すると、UTF-8という謎の値に設定されている・・・

$ env | grep LC_TYPE
LC_TYPE=UTF-8

とりあえずこれを解除すればいいんだけど、どこでやるのが一番いいかなぁと思ってちょっと調べた所こちらのページが見付かった。

Terminal > Preferences > Settings > [profile] > Advanced > Set locale environment variables on startupのチェックを外したらOKだった。

Linuxerの為のFreeBSD入門(2)

Linuxerの為のFreeBSD入門(2) published on Linuxerの為のFreeBSD入門(2) へのコメントはまだありません

前回、基本的な設定とかを行ったので、今回は必要なパッケージを入れていく。

ちなみに環境はFreeBSD 8.1

・emacs

/usr/ports/editors/emacs がそれ。ちなみにバージョンは23系。/usr/ports/editorsの下にはemacs22とemacs21というのもあり、古いバージョンを使いたい場合はそちらを使用すると良さそう。

sudo make installをすると、色々なオプションが選択できるけど、画像表示やらフォントがとかのオプションが多い。SSH経由でしか使わない人は、X関連はオフにしたい。その場合、/etc/make.confに以下の行を追加すればよい。

WITHOUT_X11=yes

Continue reading Linuxerの為のFreeBSD入門(2)

Linuxerの為のFreeBSD入門(1)

Linuxerの為のFreeBSD入門(1) published on Linuxerの為のFreeBSD入門(1) へのコメントはまだありません

訳あって、生まれて初めてFreeBSDをちょっと触ってる。

UNIX系OSはLinux、Solarisあたりはまぁまぁ分かるしそれ以外にもちょこちょこ触ったことはあるけど、一番経験が多いのはLinux(特にRedHat系)なので、他のOSに移ると戸惑うことが多い。

と言うことで、自分のようなLinuxユーザー向けにFreeBSDの基礎的なことを書く。というか単なるメモ書き。

■環境

  • さくらのVPS 512
  • FreeBSD 8.1

Continue reading Linuxerの為のFreeBSD入門(1)

UbuntuにJava入れた

UbuntuにJava入れた published on UbuntuにJava入れた へのコメントはまだありません

■背景

Scalaを触り始めて1ヶ月位経つが、殆ど勉強が進んでいない。言い訳をすると、開発環境が整わないと勉強のスピードが上がらないタイプ。

sbtの使い方は少し分かってきたので、あとはコードを書く環境を整える必要がある。Eclipse + Scala pluginに挫折したのでEmacsのプラグインであるensimeなるものを試してみることにした。

Windowsでやってもいいけど、Emacs使いの大半はUNIX系で使ってるだろうから、Windows固有の問題とかがありそうなのでパス。じゃLinuxでと思ったが、ensimeの前提としてemacs 22か23が必要。CentOSに入っているemacsは21で、バージョンアップも面倒そうなのでUbuntuが入っているVPSを使う事にした。

で、そもそもScalaを動かすにはJavaが必要なので、UbuntuにJavaを入れる必要がある。

とまぁかなり長い前振り。

■やること

たった1行だけ…

apt-get install sun-java6-jdk

ちなみに、Javaはsun-java6-jdkと、オープンソースライセンスのopenjdk-6-jdkの2種類がある。

 環境:Ubuntu 9.0.4

Continue reading UbuntuにJava入れた

Ubuntu初心者のメモ

Ubuntu初心者のメモ published on Ubuntu初心者のメモ へのコメントはまだありません

最近ちょっとIPv6の実験とかを色々してて、IPv6が使えるVPSを探していた時に、ARP Networksという会社のVPSを薦められた。

大手ではないものの結構しっかりしているらしく、結構売り切れちゃうことが多い模様。自分が契約をしようと思った8/11には売り切れていて、8/25まで待たなければいけなかった。

さて、そこのVPSはメインストリームに媚びないというか何というか、CentOSが選べないので、Ubuntuにしてみた。今までUbuntuを使ったことがないので結構色々な違いがあるんだなぁと日々実感。

以下、RedHat系ユーザーが初めてUbuntuを使った際に気づいた点をメモ書き。

  • useraddはデフォルトだとホームディレクトリを作成しない
  • 同じくuseraddで、デフォルトシェルが/bin/sh
  • デフォルトだとEDITOR=nano。ま、gentooで慣れてるからいいけど。
  • sudo apt-get update , sudo apt-get upgrade

随時追記。

UNIX系システムのパフォーマンス調査

UNIX系システムのパフォーマンス調査 published on UNIX系システムのパフォーマンス調査 へのコメントはまだありません

自分用メモ

UNIX系OSでパフォーマンスに問題を抱えているシステムの調査の仕方が書いてあるWebページ(英文)。まぁ大体知っている内容だけど、人に何か聞かれたときに勧めても良いページかな、と。

LinuxとかSolarisとかの特定のOSに特化した内容ではなく割と汎用的な記事。

M-x grep

M-x grep published on M-x grep へのコメントはまだありません

絶対存在するとは思ってたけど今まで使ってなかった機能。Emacsからのgrep呼び出し。

単にM-x grepと実行するだけ。実行するとミニバッファに以下のようなのが現れるので、後は通常のgrepコマンドと同様に入力するだけ。

Run grep (like this): grep -n -e

ちなみに自分は今まで-nとか-eなんて使った事無かった。

  • -n : 行番号表示
  • -e : 正規表現を使用

ちなみに-eの直後に検索パターンが来なきゃいけないから、-Rを使うときは-eの前に書かないとダメだね。以下のようなエラーになる。(30秒くらいハマった。)

cd /var/www/html/
grep -n -e -R mojiretsu * /dev/null
grep: mojiretsu: そのようなファイルやディレクトリはありません