vagrantでboxファイル圧縮 [ProviderがVirtualBoxの場合]
1. 仮想マシン上で以下を実行
$ sudo su - # umount /vagrant # yum clean all # dd if=/dev/zero of=/EMPTY bs=1M # rm -f /EMPTY
2. 仮想マシンをシャットダウン
$ vagrant halt
3. VirutalBoxのファイルを形式をvmdk から vdiに変更したり諸々
# VirtualBoxのHDDファイルがある場所を探す. $ vboxmanage list vms $ vboxmanage showvminfo # HDDファイルがある場所へ移動する $ cd ~/VirtualBox VMs/test-app # vmdk -> vdi $ vboxmanage clonehd test-app.vmdk test-app.vdi --format vdi # vdi形式のファイルを圧縮 $ vboxmanage modifyhd test-app.vdi compact # 作成したvdiをvmdkに変換する ## ファイル名を前のvmdkファイルと別にする必要性がある。 $ vboxmanage clonehd test-app.vdi test-app-compact.vmdk --format vmdk # 前のvmdkファイルを取り外し、圧縮したvmdkファイルを接続する。 # VirtualBoxのGUIでやるのが簡単なため割愛。
4. vagrant の boxファイルを作成 (これより前に圧縮したvmdkで動作するかどうか確認するほうが無難)
# vagrant package --out test-app.box
Windows でファイル結合
分割されたファイルを結合するためには、コマンドプロンプトで以下のように実行する。
# テキストファイルの場合 copy hoge01.txt + hoge02.txt + hoge03.txt hogehoge.txt # zipのようなバイナリファイルの場合 copy /b hoge.zip01 + hoge.zip02 + hoge.zip03 hoge.zip
mecabで記号が名詞, サ変接続とされてしまう問題の解消
概要
- MeCabのデフォルトでは半角記号が名詞、サ変接続とされてしまう。
$ mecab ; ; 名詞,サ変接続,*,*,*,*,* EOS
- この問題を解消するために未定義語の辞書を編集して、半角記号が記号として取り扱うことができるようにする
前提環境
ステップ
- unk.def の編集
- 辞書の再インストール
1. unk.def の編集
$ cat unk.def | grep SYMBOL SYMBOL,1283,1283,17585,名詞,サ変接続,*,*,*,*,* $ sed -i unk.def -e '/^SYMBOL,/s/名詞,サ変接続,\*,\*,\*,\*,\*/記号,一般,\*,\*,\*,\*,\*/' $ cat unk.def | grep SYMBOL SYMBOL,1283,1283,17585,記号,一般,*,*,*,*,*
2. 辞書の再インストール
$ sudo /usr/local/libexec/mecab/mecab-dict-index $ sudo make install $ mecab ; ; 記号,一般,*,*,*,*,* EOS
ssh で ProxyCommandが動かない問題の解決
ssh で多段ポートフォワーディングやプロキシを通す時に、~/.ssh/configにProxyCommandを設定してsshコマンドを実行しようとしたところ、下記のようなエラーが発生した。
$ ssh hoge zsh: No such file or directory write: Broken pipe
むむ、と思い、取り合えずデバッグモードで実行してみても..
$ ssh hoge -vvv ... debug1: Reading configuration data /etc/ssh/ssh_config debug1: Executing proxy command: exec ssh -CW 192.168.56.112:22 hoge debug1: permanently_drop_suid: 197609 zsh: No such file or directory ...
エラーを見る限り、ProxyCommand内に設定しているコマンドを見つけることが出来ないのではなく、zsh自体のパスが解決できていない模様。
$SHELLを見てみると zshとなっている。
$ echo $SHELL zsh
これをフルパスに直して実行すると、問題なく実行できた。
$ export SHELL=/bin/zsh $ ssh hoge
Oracle Linuxのバージョンを知る方法
RHEL系のOSの場合以下のファイルをcatすることでバーションを知ることができる。
/etc/*-release
$ ls /etc/*release /etc/oracle-release /etc/os-release /etc/redhat-release /etc/system-release
$cat /etc/os-release NAME="Oracle Linux Server" VERSION="7.3" ID="ol" VERSION_ID="7.3" PRETTY_NAME="Oracle Linux Server 7.3" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:oracle:linux:7:3:server" HOME_URL="https://linux.oracle.com/" BUG_REPORT_URL="https://bugzilla.oracle.com/" ORACLE_BUGZILLA_PRODUCT="Oracle Linux 7" ORACLE_BUGZILLA_PRODUCT_VERSION=7.3 ORACLE_SUPPORT_PRODUCT="Oracle Linux" ORACLE_SUPPORT_PRODUCT_VERSION=7.3 $ cat /etc/oracle-release Oracle Linux Server release 7.3
apache zeppelinでsparkが動かない問題(Service 'sparkDriver' could not bind on port 0. Attempting port 1. )の解決
apache zeppelin https://zeppelin.apache.org/ のチュートリアルを実行しようとした際に、ハマったのでメモ。
zeppelinはjypter notebookみたいにウェブブラウザから様々な言語(R, python, scala)やツール(spark, bigquery, hadoop等)を実行できる環境のこと。 チュートリアルとしてsparkを動かすものがあるのだが、これがエラーになっており動かない。
ログを確認すると以下のように表示されている
WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1. ERROR SparkContext: Error initializing SparkContext.
これの原因はapache zeppelinがインストールされているサーバのホストネームの設定が誤っていること。 一度誤った固定IPとそれに紐づくドメインを設定していて、そのままになっていたのを忘れていた。
誤ったIP: 196.18.35.2 誤ったドメイン: tmks0828.jp.example.com 正しいIP: 196.18.35.1 正しいドメイン: tmks0820.jp.example.com
サーバのホストネームの設定と/etc/hostsの記述を変更する
$ hostname tmks0828.jp.example.com $ hostname tmks0820.jp.example.com $ hostname tmks0820.jp.example.com $ vim /etc/hosts .... 196.18.35.1 tmks0820.jp.example.com ....
zeppelinを再起動すると、チュートリアルのsparkを実行することが出来た。