Con_HumiのDEV_LOG

開発メモやガジェットのことをつらつらと.

Vagrantの環境をバックアップ/復元しようと思う

こんにちは.
開発環境をVirtualBox上に構築してVagrantで管理しようとしているCon_Humiです.

ある程度環境が構築できたら,その時点の環境をバックアップしておくことで,
困ったときに以前の環境に戻れるようにしておくと泣くことが少なくなります.

そこで,その方法を調べたのでメモしておきます.

現在の環境をバックアップする

もしゲストマシンが動いているときは

$ vagrant halt

で停止します.
そして,

$ vagrant package --output=backupXXXXXXXX.box

backupXXXXXXXX.boxファイルとしてバックアップすることが出来ます.

追記:1/18
--outputオプションをつけるとなんかエラーが出ました.

$ vagrant package

↑のようにオプション無しで実行すれば成功したので,原因調査中です.
オプション無しで実行した場合,package.boxと言うファイルが出力されます.
:追記終わり

こまめにバックアップしておけば,
困ったときに直前の環境に戻すことが出来そうです.

バックアップファイルから環境を復元する

まず,バックアップとして保存したboxファイルをvagrantに登録します.

$ vagrant add BOXNAME backupXXXXXXXX.box

もし以前と同じディレクトリとリンクさせたいときは,

$ cp Vagrantfile Vagrantfile.bak

などでVagrantfileを退避しておいて,

$ vagrant destroy

して現在のゲストマシンを削除.

$ vagrant init BOXNAME

でバックアップしたboxファイルからゲストマシンを作成します.

$ mv Vagrantfile.bak Vagrantfile

などでVagrantfileを上書すれば以前の設定も引き継がれます.(たぶん)

開発環境つかって開発しないと.........頑張ります.

jedi-vim 使ってみます.

Vimスニペット補完の設定はいい感じに動いたので,いよいよjedi-vimを導入しようと思います.

vimでpython3を書く時のおすすめの補完設定 - kazy no blog

[vim]python補完プラグイン「jedi-vim」を快適にする方法(jedi-vim+neocomplete) - dackdive's blog

このお二方の記事が大変参考になりました.
ありがとうございます.

で,やったことは,

jedi-vimのインストール

.vimrc

NeoBundle 'davidhalter/jedi-vim'

を追記して,jedi-vimの導入.
ちなみに,NeoBundleでプラグイン管理しています.
Shougoさんのプラグインを活用させて頂いています.
いつもありがとうございますm( )m

そんでもって,Vimのコマンドモードで:source ~/.vimrcを実行.
NeoBundleInstallのダイアログ(GVim使ってます)が出てくるのでyesを選択.
これでプラグインがダウンロード&インストールされます.

それだけではダメみたいでさらに,~/.vim/bundle/jedi-vim/jedi/に移動して,

git submodule update --init

を実行しました.

jedi-vimの設定も追記

.vimrc

"------------------------------------------------------------
" jedi-vim Setting

autocmd FileType python setlocal omnifunc=jedi#completions
let g:jedi#completions_enabled = 0
let g:jedi#auto_vim_configuration = 0
if !exists('g:neocomplete#force_omni_input_patterns')
    let g:neocomplete#force_omni_input_patterns = {}
endif

g:neocomplete#force_omni_input_patterns.python = '\h\w*\|[^. \t]\.\w*'

"------------------------------------------------------------

と追記して,再び:source ~/.vimrcを実行.

すると......

f:id:Con_Humi:20150114232329p:plain

お,補完できています!
参考にさせていただいた記事のお二方,ありがとうございます!

Pythonの勉強もがんばろーっと.

VimのNeoSnippetの設定

MBPでのメインエディタはMacVimを使おうと頑張っているCon_Humiです.

macvim-kaoriya - MacVim KaoriYa - Google Project Hosting

このエディタでPythonのコードを書こうと思っていて,

を使いたいなーと思っています.
Shougo/neocomplete.vim · GitHubShougo/neosnippet.vim · GitHub
連携できたらと思っているのですが,どうやらスニペットの展開がうまく出来ないので,
NeoSnippetの設定を見直しました.

" ------------------------------------------------------------
" NeoSnippetの設定
if neobundle#tap('neosnippet.vim')
    call neobundle#config({"autoload": {"insert": 1}})
    function! neobundle#tapped.hooks.on_source(bundle)
        " Plugin key-mappings.
        imap <C-k>     <Plug>(neosnippet_expand_or_jump)
        smap <C-k>     <Plug>(neosnippet_expand_or_jump)
        xmap <C-k>     <Plug>(neosnippet_expand_target)
        " SuperTab like snippets behavior.
        imap <expr><TAB> neosnippet#expandable_or_jumpable() ? "\<Plug>(neosnippet_expand_or_jump)": pumvisible() ? "\<C-n>" : "\<TAB>"
        smap <expr><TAB> neosnippet#expandable_or_jumpable() ? "\<Plug>(neosnippet_expand_or_jump)": "\<TAB>"
        " For snippet_complete marker.
        if has('conceal')
            set conceallevel=2 concealcursor=i
        endif
    endfunction
    call neobundle#untap()
endif
" ------------------------------------------------------------

NeoSnippetのGitHubで紹介されている設定をneobundle#tapと'neobundle#untap'で囲って
プラグインが読み込まれたタイミングで設定が有効になるようにしていた(のだと思う)のですが,
これが良くなかった模様.

" ------------------------------------------------------------
" NeoSnippetの設定
" Plugin key-mappings.
imap <C-k>     <Plug>(neosnippet_expand_or_jump)
smap <C-k>     <Plug>(neosnippet_expand_or_jump)
xmap <C-k>     <Plug>(neosnippet_expand_target)
" SuperTab like snippets behavior.
imap <expr><TAB> neosnippet#expandable_or_jumpable() ? "\<Plug>(neosnippet_expand_or_jump)": pumvisible() ? "\<C-n>" : "\<TAB>"
smap <expr><TAB> neosnippet#expandable_or_jumpable() ? "\<Plug>(neosnippet_expand_or_jump)": "\<TAB>"
" For snippet_complete marker.
if has('conceal')
    set conceallevel=2 concealcursor=i
endif
" End NeoSnippetの設定
" ------------------------------------------------------------

読み込みタイミングの指定をなくしたらすんなり動作しました.(なんでだ?)

記事を書いていてもあやふやな部分が多いのでもう少しNeoBundleとVimScriptの勉強をしないとですね.

本買いました

何冊か本買いました.

いろいろ積み本あるから,勉強しなくては.
買った本+現在の積み本はコチラ↓

パーフェクトPython (PERFECT SERIES 5)

パーフェクトPython (PERFECT SERIES 5)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Vimテクニックバイブル ?作業効率をカイゼンする150の技

Vimテクニックバイブル ?作業効率をカイゼンする150の技

独習C++ 第4版

独習C++ 第4版

あぁ,勉強しなくては.

Vagrant おん CentOS6.5 おん Python 2.7 & 3.3 & virtualenv

VirtualBoxVagrantで操作して開発環境に使おうと考えています.

ということで,Pythonの開発環境を構築した時のメモです.

仮想マシンの用意

なにはともあれ,仮想マシンを用意します.
VirtualBoxVagrantはインストール&設定されているとして.

1. 仮想マシンのboxイメージをVagrantに登録

Vagrantでいう仮想マシンのOSに相当する(と思っている)boxイメージをVagrantに登録します.

A list of base boxes for Vagrant - Vagrantbox.es

このページから仮想マシンのboxイメージを探して,
気に入ったものを見つけておきます.
今回は
CentOS 6.5 x86_64
https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
というboxイメージを利用させてもらいました.
作者の方,ありがとうございます.

で,Vagrantにこのboxイメージを登録するには,

$ vagrant box add boxの名前 boxイメージのURL

とします.
[boxイメージのURL] には,先ほど記述したURLを入れます.
[boxイメージの名前]には,わかりやすい名前を任意で設定します.
ここでは,centos6_5 とします.

2. 仮想マシンの作成

次に,仮想マシンを作成します.
任意の作業ディレクトリに,仮想マシン用のディレクトリを作成します.(その後移動します)

$ mkdir vagrantVM && cd vagrantVM

仮想マシンのディレクトリで,

$ vagrant init centos6_5

すると,Vagrantfile なるものができるので,それを確認します.
そのままそのディレクトリで

$ vagrant up

すると,仮想マシンが起動します.

3. 仮想マシンsshして作業

仮想マシンにログインして作業するには,

$ vagrant status

コマンドでマシンが起動していることを確認しておいて,

$ vagrant ssh

でログインできます.
これでいくらでも仮想マシンをゴニョゴニョ出来ます.

仮想マシンの作成で作成した仮想マシンディレクトリ(今回の例ではvagrantVM)と,
仮想マシン上の /vagrant ディレクトリがシンボリックリンクされています.
「ホストのアプリケーションで仮想マシンのファイルを編集して,仮想マシンの実行環境で試す」
ということが可能です.

仮想マシンPythonの開発環境をいんすとろーる

本題のほうです.
仮想マシンで使っているCentOS6.5のデフォルトのPythonのバージョンは2.6です.
Pythonの最新バージョンは,2系統が2.7,3系統が3.4です.

CenOS6.5にPythonのvirtualenv環境とPython2.7、Python3とmod_wsgiをインストールする | Python Knowledge

こちらのサイトを参考にセットアップしました.
3系統の最新バージョンは3.4ですが,3.3を使うことにします.
Python3.4もyumでインストールできそうです.

手順通りに進めてインストール出来ましたが,
仮想環境を作るmkvirtualenvコマンドが実行できずにつまづきました.

mkvirtualenvコマンドにパスを通す必要があります.
そこで下記,


Python Django入門 (2) Mac編 - Qiita

Qiitaのkaki_kさんの記事を参考にさせていただき解決です.
.bashrcの設定内容で

source /usr/local/bin/virtualenvwrapper.sh

とある部分を,自分の環境に合わせて

source /usr/bin/virtualenvwrapper.sh

とします. これでmkvirtualenvコマンドを使うことが出来ました.
で,結果のスクショをドヤ顔で(笑)

f:id:Con_Humi:20150109133636p:plain

Pythonを勉強してみよーっと.

あ,新年だ.

あけましておめでとうございます.

管理人のCon_Humiです.

さっきの投稿をした後に新年であることに気づきました.

昨年中を振り返ってみると,
早いうちに内定を頂いたので,就職活動が早々に終了し,
研究に専念できるかとおもいきや,自分の堕落した生活のせいでそうも行かず,
一方で,他の内定者の皆様との交流を通じで,沢山の刺激を得られた年でした.
趣味の音楽の活動でも,沢山の刺激を受けることが出来ました.
それもこれも,支えてくださっている沢山の方々との出会いのお陰です.
本当にありがとうございます.

今年の4月には就職で,気の引き締まる思いです.
仕事と両立しながら,開発メモを量産できるよう,
自己研鑚に励んでいきたいと思います.

当ブログを読んでくださっている皆様,ありがとうございます.
駄文が多くなるかもしれませんが,本年もよろしくお願いいたします.

NAS4FreeがTimeMachineのバックアップ先に指定できないよ

こんにちは.
昔の記事

で紹介しましたがMicroServerにNAS4Freeをインストールして,
ファイルサーバーにすることは出来ました.

なぜだか,TimeMachineのバックアップ先に指定できない

こちらの記事↓

NAS4Free で Time Machine サーバーを実現する - Ellinikonblue.com Weblog

を参考にさせてもらいながら,AFPを設定し用としたのですが,
なぜだか僕の環境ではTimeMachineのバックアップ先として
MBPが認識してくれません(T T) AFPは記事の通り設定すればMacから見れるようになります.

TimeMachineのバックアップストレージの認識のあたりでコケてるのかな?

そもそも,バージョンが異なるからか,NAS4FreeのAFPの設定項目が足りないし...

原因調査してまた書きます.