<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[技ログ]]></title>
  <link href="http://blog.chacrue.com/atom.xml" rel="self"/>
  <link href="http://blog.chacrue.com/"/>
  <updated>2014-01-29T00:48:43+09:00</updated>
  <id>http://blog.chacrue.com/</id>
  <author>
    <name><![CDATA[R.Asaka]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[OptiPNGでPNG形式の画像をロスレス圧縮・軽量化する]]></title>
    <link href="http://blog.chacrue.com/posts/2014/optipng/"/>
    <updated>2014-01-28T23:15:03+09:00</updated>
    <id>http://blog.chacrue.com/posts/2014/optipng</id>
    <content type="html"><![CDATA[<p>OptiPNGでPNG形式の画像を劣化なく圧縮し軽量化する。<br/>
<a href="http://optipng.sourceforge.net/"><strong>OptiPNG公式</strong></a></p>

<p>CentOSならyumでもインストール可能だが、バージョンが少し古いので、
ソースからインストールした。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>yum info optipng
</span><span class='line'>Name        : optipng
</span><span class='line'>Arch        : x86_64
</span><span class='line'>Version     : 0.6.4
</span><span class='line'>Release     : 1.el6
</span><span class='line'>Size        : 82 k
</span><span class='line'>Repo        : epel
</span><span class='line'>Summary     : PNG optimizer and converter
</span><span class='line'>URL         : http://optipng.sourceforge.net/
</span><span class='line'>License     : zlib
</span><span class='line'>Description : OptiPNG is a PNG optimizer that recompresses image files to a smaller size,
</span><span class='line'>            : without losing any information. This program also converts external formats
</span><span class='line'>            : <span class="o">(</span>BMP, GIF, PNM and TIFF<span class="o">)</span> to optimized PNG, and performs PNG integrity checks
</span><span class='line'>            : and corrections.
</span></code></pre></td></tr></table></div></figure>


<p>ソースをダウンロード・展開。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>wget <span class="s2">&quot;http://prdownloads.sourceforge.net/optipng/optipng-0.7.4.tar.gz?download&quot;</span>
</span><span class='line'><span class="nv">$ </span>tar xzf optipng-0.7.4.tar.gz
</span><span class='line'><span class="nv">$ </span><span class="nb">cd </span>optipng-0.7.4
</span></code></pre></td></tr></table></div></figure>


<p>インストール方法確認。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="o">[</span>root@vagrant-blog optipng-0.7.4<span class="o">]</span><span class="c"># cat README.txt</span>
</span><span class='line'>Build instructions
</span><span class='line'>------------------
</span><span class='line'>  On Unix, or under a Bourne-compatible shell, run ./configure and make:
</span><span class='line'>        <span class="nb">cd </span>optipng-0.7.4/
</span><span class='line'>        ./configure
</span><span class='line'>        make
</span><span class='line'>        make <span class="nb">test</span>
</span><span class='line'>
</span><span class='line'>Installation instructions
</span><span class='line'>-------------------------
</span><span class='line'>  Build the program according to the instructions above.
</span><span class='line'>
</span><span class='line'>  On Unix:
</span><span class='line'>  - Make the <span class="s2">&quot;install&quot;</span> target:
</span><span class='line'>        sudo make install
</span><span class='line'>  - To uninstall, make the <span class="s2">&quot;uninstall&quot;</span> target:
</span><span class='line'>        sudo make uninstall
</span><span class='line'>
</span><span class='line'><span class="o">[</span>root@vagrant-blog optipng-0.7.4<span class="o">]</span><span class="c"># ./configure --help</span>
</span><span class='line'>Usage:
</span><span class='line'>    ./configure <span class="o">[</span>options<span class="o">]</span>
</span><span class='line'>Options:
</span><span class='line'>    -h, -help               Show this <span class="nb">help</span>
</span><span class='line'>Installation directories:
</span><span class='line'>    -prefix<span class="o">=</span>PREFIX          Install architecture-independent files in PREFIX
</span><span class='line'>                            <span class="o">[</span>default: /usr/local<span class="o">]</span>
</span><span class='line'>    -exec-prefix<span class="o">=</span>EPREFIX    Install architecture-dependent files in EPREFIX
</span><span class='line'>                            <span class="o">[</span>default: PREFIX<span class="o">]</span>
</span><span class='line'>    -bindir<span class="o">=</span>DIR             Install executable in DIR <span class="o">[</span>default: EPREFIX/bin<span class="o">]</span>
</span><span class='line'>    -mandir<span class="o">=</span>DIR             Install manual in DIR <span class="o">[</span>default: PREFIX/man<span class="o">]</span>
</span><span class='line'>Optional features:
</span><span class='line'>    -enable-debug           Enable debug build flags and run-time checks
</span><span class='line'>Optional packages:
</span><span class='line'>    -with-system-libpng     Use the system-supplied libpng
</span><span class='line'>                            <span class="o">[</span>default: <span class="nb">false</span><span class="o">]</span>
</span><span class='line'>    -with-system-zlib       Use the system-supplied zlib
</span><span class='line'>                            <span class="o">[</span>default: with-system-libpng<span class="o">]</span>
</span><span class='line'>Environment variables:
</span><span class='line'>    CC                      C compiler <span class="nb">command</span>
</span><span class='line'><span class="nb">    </span>LD                      Linker <span class="nb">command</span>
</span><span class='line'><span class="nb">    </span>CFLAGS                  C compiler flags <span class="o">(</span>e.g. -O3<span class="o">)</span>
</span><span class='line'>    CPPFLAGS                C preprocessor flags <span class="o">(</span>e.g. -I DIR<span class="o">)</span>
</span><span class='line'>    LDFLAGS                 Linker flags <span class="o">(</span>e.g. -L DIR<span class="o">)</span>
</span><span class='line'>    LIBS                    Additional libraries <span class="o">(</span>e.g. -lfoo<span class="o">)</span>
</span></code></pre></td></tr></table></div></figure>


<p>終了コードを確認しつつ、configure→make→make test→make installする。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>./configure ; <span class="nb">echo</span> <span class="nv">$?</span>
</span><span class='line'>0
</span><span class='line'><span class="nv">$ CPU_CORE</span><span class="o">=</span><span class="k">$(</span>grep -c <span class="s1">&#39;^processor\b&#39;</span> /proc/cpuinfo<span class="k">)</span>
</span><span class='line'><span class="nv">$ </span>make -j <span class="nv">$CPU_CORE</span> ; <span class="nb">echo</span> <span class="nv">$?</span>
</span><span class='line'>0
</span><span class='line'><span class="nv">$ </span>make <span class="nb">test</span> -j <span class="nv">$CPU_CORE</span> ; <span class="nb">echo</span> <span class="nv">$?</span>
</span><span class='line'>0
</span><span class='line'><span class="nv">$ </span>sudo make install ; <span class="nb">echo</span> <span class="nv">$?</span>
</span><span class='line'><span class="nb">cd </span>src/optipng <span class="o">&amp;&amp;</span> <span class="se">\</span>
</span><span class='line'>  make install <span class="o">&amp;&amp;</span> <span class="se">\</span>
</span><span class='line'>  <span class="nb">cd</span> ../..
</span><span class='line'>make<span class="o">[</span>1<span class="o">]</span>: Entering directory <span class="sb">`</span>/usr/local/src/optipng-0.7.4/src/optipng<span class="s1">&#39;</span>
</span><span class='line'><span class="s1">mkdir -p /usr/local/bin</span>
</span><span class='line'><span class="s1">mkdir -p /usr/local/man/man1</span>
</span><span class='line'><span class="s1">cp -f -p optipng /usr/local/bin</span>
</span><span class='line'><span class="s1">cp -f -p man/optipng.1 /usr/local/man/man1</span>
</span><span class='line'><span class="s1">make[1]: Leaving directory `/usr/local/src/optipng-0.7.4/src/optipng&#39;</span>
</span><span class='line'>0
</span></code></pre></td></tr></table></div></figure>


<p>インストール確認。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>optipng -v
</span><span class='line'>OptiPNG version 0.7.4
</span><span class='line'>Copyright <span class="o">(</span>C<span class="o">)</span> 2001-2012 Cosmin Truta and the Contributing Authors.
</span><span class='line'>
</span><span class='line'>This program is open-source software. See LICENSE <span class="k">for </span>more details.
</span><span class='line'>
</span><span class='line'>Portions of this software are based in part on the work of:
</span><span class='line'>  Jean-loup Gailly and Mark Adler <span class="o">(</span>zlib<span class="o">)</span>
</span><span class='line'>  Glenn Randers-Pehrson and the PNG Development Group <span class="o">(</span>libpng<span class="o">)</span>
</span><span class='line'>  Miyasaka Masaru <span class="o">(</span>BMP support<span class="o">)</span>
</span><span class='line'>  David Koblas <span class="o">(</span>GIF support<span class="o">)</span>
</span><span class='line'>
</span><span class='line'>Using libpng version 1.4.12 and zlib version 1.2.7-optipng
</span></code></pre></td></tr></table></div></figure>


<p>オプション確認。<br/>
普通に使う分にはオプションなしでファイル指定するだけで圧縮してくれる。<br/>
→細かくオプションの内容を確認したい場合は<code>man optipng</code>する</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>optipng --help
</span><span class='line'>Synopsis:
</span><span class='line'>    optipng <span class="o">[</span>options<span class="o">]</span> files ...
</span><span class='line'>Files:
</span><span class='line'>    Image files of <span class="nb">type</span>: PNG, BMP, GIF, PNM or TIFF
</span><span class='line'>Basic options:
</span><span class='line'>    -?, -h, -help show this <span class="nb">help</span>
</span><span class='line'>    -o &lt;level&gt;    optimization level <span class="o">(</span>0-7<span class="o">)</span>    <span class="o">[</span>default: 2<span class="o">]</span>
</span><span class='line'>    -v      run in verbose mode / show copyright and version info
</span><span class='line'>General options:
</span><span class='line'>    -backup, -keep  keep a backup of the modified files
</span><span class='line'>    -clobber    overwrite existing files
</span><span class='line'>    -fix    <span class="nb">enable </span>error recovery
</span><span class='line'>    -force    enforce writing of a new output file
</span><span class='line'>    -preserve   preserve file attributes <span class="k">if </span>possible
</span><span class='line'>    -quiet, -silent run in quiet mode
</span><span class='line'>    -simulate   run in simulation mode
</span><span class='line'>    -out &lt;file&gt;   write output file to &lt;file&gt;
</span><span class='line'>    -dir &lt;directory&gt;  write output file<span class="o">(</span>s<span class="o">)</span> to &lt;directory&gt;
</span><span class='line'>    -log &lt;file&gt;   log messages to &lt;file&gt;
</span><span class='line'>    --      stop option switch parsing
</span><span class='line'>Optimization options:
</span><span class='line'>    -f &lt;filters&gt;  PNG delta filters <span class="o">(</span>0-5<span class="o">)</span>     <span class="o">[</span>default: 0,5<span class="o">]</span>
</span><span class='line'>    -i &lt;<span class="nb">type</span>&gt;   PNG interlace <span class="nb">type</span> <span class="o">(</span>0-1<span class="o">)</span>
</span><span class='line'>    -zc &lt;levels&gt;  zlib compression levels <span class="o">(</span>1-9<span class="o">)</span>   <span class="o">[</span>default: 9<span class="o">]</span>
</span><span class='line'>    -zm &lt;levels&gt;  zlib memory levels <span class="o">(</span>1-9<span class="o">)</span>    <span class="o">[</span>default: 8<span class="o">]</span>
</span><span class='line'>    -zs &lt;strategies&gt;  zlib compression strategies <span class="o">(</span>0-3<span class="o">)</span> <span class="o">[</span>default: 0-3<span class="o">]</span>
</span><span class='line'>    -zw &lt;size&gt;    zlib window size <span class="o">(</span>256,512,1k,2k,4k,8k,16k,32k<span class="o">)</span>
</span><span class='line'>    -full   produce a full report on IDAT <span class="o">(</span>might reduce speed<span class="o">)</span>
</span><span class='line'>    -nb     no bit depth reduction
</span><span class='line'>    -nc     no color <span class="nb">type </span>reduction
</span><span class='line'>    -np     no palette reduction
</span><span class='line'>    -nx     no reductions
</span><span class='line'>    -nz     no IDAT recoding
</span><span class='line'>Editing options:
</span><span class='line'>    -snip   cut one image out of multi-image or animation files
</span><span class='line'>    -strip &lt;objects&gt;  strip metadata objects <span class="o">(</span>e.g. <span class="s2">&quot;all&quot;</span><span class="o">)</span>
</span><span class='line'>Optimization levels:
</span><span class='line'>    -o0   &lt;<span class="o">=</span>&gt; -o1 -nx -nz       <span class="o">(</span>0 or 1 trials<span class="o">)</span>
</span><span class='line'>    -o1   &lt;<span class="o">=</span>&gt; -zc9 -zm8 -zs0 -f0      <span class="o">(</span>1 trial<span class="o">)</span>
</span><span class='line'>        <span class="o">(</span>or...<span class="o">)</span> -zc9 -zm8 -zs1 -f5      <span class="o">(</span>1 trial<span class="o">)</span>
</span><span class='line'>    -o2   &lt;<span class="o">=</span>&gt; -zc9 -zm8 -zs0-3 -f0,5      <span class="o">(</span>8 trials<span class="o">)</span>
</span><span class='line'>    -o3   &lt;<span class="o">=</span>&gt; -zc9 -zm8-9 -zs0-3 -f0,5    <span class="o">(</span>16 trials<span class="o">)</span>
</span><span class='line'>    -o4   &lt;<span class="o">=</span>&gt; -zc9 -zm8 -zs0-3 -f0-5      <span class="o">(</span>24 trials<span class="o">)</span>
</span><span class='line'>    -o5   &lt;<span class="o">=</span>&gt; -zc9 -zm8-9 -zs0-3 -f0-5    <span class="o">(</span>48 trials<span class="o">)</span>
</span><span class='line'>    -o6   &lt;<span class="o">=</span>&gt; -zc1-9 -zm8 -zs0-3 -f0-5    <span class="o">(</span>120 trials<span class="o">)</span>
</span><span class='line'>    -o7   &lt;<span class="o">=</span>&gt; -zc1-9 -zm8-9 -zs0-3 -f0-5    <span class="o">(</span>240 trials<span class="o">)</span>
</span><span class='line'>    -o7 -zm1-9  &lt;<span class="o">=</span>&gt; -zc1-9 -zm1-9 -zs0-3 -f0-5    <span class="o">(</span>1080 trials<span class="o">)</span>
</span><span class='line'>Notes:
</span><span class='line'>    The combination <span class="k">for</span> -o1 is chosen heuristically.
</span><span class='line'>    Exhaustive combinations such as <span class="s2">&quot;-o7 -zm1-9&quot;</span> are not generally recommended.
</span><span class='line'>Examples:
</span><span class='line'>    optipng file.png            <span class="o">(</span>default speed<span class="o">)</span>
</span><span class='line'>    optipng -o5 file.png          <span class="o">(</span>slow<span class="o">)</span>
</span><span class='line'>    optipng -o7 file.png          <span class="o">(</span>very slow<span class="o">)</span>
</span></code></pre></td></tr></table></div></figure>


<p>ここでは360KBの画像を圧縮してみる。<br/>
まずは<code>-simulate</code>オプションでどの程度圧縮されるか確認。<br/>
※実際には処理は行われない</p>

<p>→100KB程度圧縮される模様</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># optipng -simulate virtualbox-error-1.png</span>
</span><span class='line'>** Processing: virtualbox-error-1.png
</span><span class='line'>1024x711 pixels, 4x8 bits/pixel, RGB+alpha
</span><span class='line'>Reducing image to 3x8 bits/pixel, RGB
</span><span class='line'>Input IDAT <span class="nv">size</span> <span class="o">=</span> 365449 bytes
</span><span class='line'>Input file <span class="nv">size</span> <span class="o">=</span> 368428 bytes
</span><span class='line'>
</span><span class='line'>Trying:
</span><span class='line'>  <span class="nv">zc</span> <span class="o">=</span> 9  <span class="nv">zm</span> <span class="o">=</span> 8  <span class="nv">zs</span> <span class="o">=</span> 0  <span class="nv">f</span> <span class="o">=</span> 0   IDAT <span class="nv">size</span> <span class="o">=</span> 262703
</span><span class='line'>
</span><span class='line'>Selecting parameters:
</span><span class='line'>  <span class="nv">zc</span> <span class="o">=</span> 9  <span class="nv">zm</span> <span class="o">=</span> 8  <span class="nv">zs</span> <span class="o">=</span> 0  <span class="nv">f</span> <span class="o">=</span> 0   IDAT <span class="nv">size</span> <span class="o">=</span> 262703
</span><span class='line'>
</span><span class='line'>No output: simulation mode.
</span></code></pre></td></tr></table></div></figure>


<p><code>-backup</code>オプションでバックアップファイルを作成しつつ、圧縮してみる。</p>

<ul>
<li>27.96%圧縮され、約100KB軽量化</li>
<li>処理時間は2秒程度（MacBook Pro Retina Late 2013 Core i5のVirtualbox上の仮想マシン）</li>
</ul>


<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>optipng -backup virtualbox-error-1.png
</span><span class='line'>** Processing: virtualbox-error-1.png
</span><span class='line'>1024x711 pixels, 4x8 bits/pixel, RGB+alpha
</span><span class='line'>Reducing image to 3x8 bits/pixel, RGB
</span><span class='line'>Input IDAT <span class="nv">size</span> <span class="o">=</span> 365449 bytes
</span><span class='line'>Input file <span class="nv">size</span> <span class="o">=</span> 368428 bytes
</span><span class='line'>
</span><span class='line'>Trying:
</span><span class='line'>  <span class="nv">zc</span> <span class="o">=</span> 9  <span class="nv">zm</span> <span class="o">=</span> 8  <span class="nv">zs</span> <span class="o">=</span> 0  <span class="nv">f</span> <span class="o">=</span> 0   IDAT <span class="nv">size</span> <span class="o">=</span> 262703
</span><span class='line'>
</span><span class='line'>Selecting parameters:
</span><span class='line'>  <span class="nv">zc</span> <span class="o">=</span> 9  <span class="nv">zm</span> <span class="o">=</span> 8  <span class="nv">zs</span> <span class="o">=</span> 0  <span class="nv">f</span> <span class="o">=</span> 0   IDAT <span class="nv">size</span> <span class="o">=</span> 262703
</span><span class='line'>
</span><span class='line'>Output IDAT <span class="nv">size</span> <span class="o">=</span> 262703 bytes <span class="o">(</span>102746 bytes decrease<span class="o">)</span>
</span><span class='line'>Output file <span class="nv">size</span> <span class="o">=</span> 265418 bytes <span class="o">(</span>103010 <span class="nv">bytes</span> <span class="o">=</span> 27.96% decrease<span class="o">)</span>
</span><span class='line'>
</span><span class='line'><span class="nv">$ </span>ll virtualbox-error-1.png*
</span><span class='line'>-rw-r--r--  1  501 501  265418 2014-01-28 23:15 virtualbox-error-1.png
</span><span class='line'>-rw-r--r--  1  501 501  368428 2014-01-28 23:30 virtualbox-error-1.png.bak
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># time optipng -backup virtualbox-error-1.png</span>
</span><span class='line'>** Processing: virtualbox-error-1.png
</span><span class='line'>1024x711 pixels, 4x8 bits/pixel, RGB+alpha
</span><span class='line'>Reducing image to 3x8 bits/pixel, RGB
</span><span class='line'>Input IDAT <span class="nv">size</span> <span class="o">=</span> 365449 bytes
</span><span class='line'>Input file <span class="nv">size</span> <span class="o">=</span> 368428 bytes
</span><span class='line'>
</span><span class='line'>Trying:
</span><span class='line'>  <span class="nv">zc</span> <span class="o">=</span> 9  <span class="nv">zm</span> <span class="o">=</span> 8  <span class="nv">zs</span> <span class="o">=</span> 0  <span class="nv">f</span> <span class="o">=</span> 0   IDAT <span class="nv">size</span> <span class="o">=</span> 262703
</span><span class='line'>
</span><span class='line'>Selecting parameters:
</span><span class='line'>  <span class="nv">zc</span> <span class="o">=</span> 9  <span class="nv">zm</span> <span class="o">=</span> 8  <span class="nv">zs</span> <span class="o">=</span> 0  <span class="nv">f</span> <span class="o">=</span> 0   IDAT <span class="nv">size</span> <span class="o">=</span> 262703
</span><span class='line'>
</span><span class='line'>Output IDAT <span class="nv">size</span> <span class="o">=</span> 262703 bytes <span class="o">(</span>102746 bytes decrease<span class="o">)</span>
</span><span class='line'>Output file <span class="nv">size</span> <span class="o">=</span> 265418 bytes <span class="o">(</span>103010 <span class="nv">bytes</span> <span class="o">=</span> 27.96% decrease<span class="o">)</span>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>real  0m1.905s
</span><span class='line'>user  0m1.900s
</span><span class='line'>sys 0m0.003s
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>grep <span class="s2">&quot;model name&quot;</span> /proc/cpuinfo
</span><span class='line'>model name  : Intel<span class="o">(</span>R<span class="o">)</span> Core<span class="o">(</span>TM<span class="o">)</span> i5-4288U CPU @ 2.60GHz
</span><span class='line'>model name  : Intel<span class="o">(</span>R<span class="o">)</span> Core<span class="o">(</span>TM<span class="o">)</span> i5-4288U CPU @ 2.60GHz
</span></code></pre></td></tr></table></div></figure>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Octopressで画像のwidth,height属性を指定する]]></title>
    <link href="http://blog.chacrue.com/posts/2014/octopress-image-size/"/>
    <updated>2014-01-26T16:36:07+09:00</updated>
    <id>http://blog.chacrue.com/posts/2014/octopress-image-size</id>
    <content type="html"><![CDATA[<p>Octopressで表示させる画像にwidth,height属性を指定するようにした。<br/>
<a href="http://octopress.org/docs/plugins/image-tag/">http://octopress.org/docs/plugins/image-tag/</a></p>

<h3>Syntax</h3>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>{% img [class names] /path/to/image [width] [height] [title property [alt property]] %}</span></code></pre></td></tr></table></div></figure>


<p>例えば、下記のように記述する。</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='diff'><span class='line'><span class="gd">-![alt property](/images/image-1.png)</span>
</span><span class='line'><span class="gi">+{% img /images/image-1.png 200 160 &quot;title property&quot; &quot;alt property&quot; %}</span>
</span></code></pre></td></tr></table></div></figure>


<p>結果、生成されるHTMLは以下のようになる。</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='diff'><span class='line'><span class="gd">-&lt;p&gt;&lt;img src=&quot;/images/image-1.png&quot; alt=&quot;alt property&quot; /&gt;&lt;/p&gt;</span>
</span><span class='line'><span class="gi">+&lt;p&gt;&lt;img src=&quot;/images/image-1.png&quot; width=&quot;200&quot; height=&quot;160&quot; title=&quot;title property&quot; alt=&quot;alt property&quot;&gt;&lt;/p&gt;</span>
</span></code></pre></td></tr></table></div></figure>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Octopressの言語指定を日本語にする]]></title>
    <link href="http://blog.chacrue.com/posts/2014/site-language-change/"/>
    <updated>2014-01-21T22:17:08+09:00</updated>
    <id>http://blog.chacrue.com/posts/2014/site-language-change</id>
    <content type="html"><![CDATA[<p>Octopressの言語指定はデフォルトで英語になっているため、
日本語の記事を書いていても、Chromeでアクセスすると英語サイト判定されて翻訳するかどうかの通知が出てしまう。</p>

<p>→source/_includes/head.html でlang属性を修正すれば良い</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='diff'><span class='line'>$ vim source/_includes/head.html
</span><span class='line'><span class="gd">-&lt;!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]&gt;&lt;!--&gt;&lt;html class=&quot;no-js&quot; lang=&quot;en&quot;&gt;&lt;!--&lt;![endif]--&gt;</span>
</span><span class='line'><span class="gi">+&lt;!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]&gt;&lt;!--&gt;&lt;html class=&quot;no-js&quot; lang=&quot;ja&quot;&gt;&lt;!--&lt;![endif]--&gt;</span>
</span></code></pre></td></tr></table></div></figure>




<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&nou=1&bg1=FFFFFF&fc1=0A0808&lc1=0099FF&t=chacrue-22&o=9&p=8&l=as1&m=amazon&f=ifr&ref=tf_til&asins=4798129674" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Octopressで日本語の記事が書けない]]></title>
    <link href="http://blog.chacrue.com/posts/2014/octopress-japanese-post/"/>
    <updated>2014-01-19T18:56:15+09:00</updated>
    <id>http://blog.chacrue.com/posts/2014/octopress-japanese-post</id>
    <content type="html"><![CDATA[<p>Octopressで一つ記事を書いたので、
試しにアップしようとしたところ、以下のエラーが出てgenerate出来ない。</p>

<p>※OSはCentOS 6.5で必要最小限のパッケージしか入れていない。<br/>
<a href="https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box">https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box</a></p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>bundle <span class="nb">exec </span>rake generate
</span><span class='line'><span class="c">## Generating Site with Jekyll</span>
</span><span class='line'>identical <span class="nb">source</span>/stylesheets/screen.css
</span><span class='line'>---
</span><span class='line'>Configuration from /app/rails_projects/blog/rasaka.github.io/_config.yml
</span><span class='line'>Building site: <span class="nb">source</span> -&gt; public
</span><span class='line'>YAML Exception reading 2014-01-13-nfs-mount-error.markdown: invalid byte sequence in US-ASCII
</span><span class='line'>/app/rails_projects/blog/rasaka.github.io/plugins/backtick_code_block.rb:13:in <span class="sb">`</span>gsub<span class="s1">&#39;: invalid byte sequence in US-ASCII (ArgumentError)</span>
</span><span class='line'><span class="s1">  from /app/rails_projects/blog/rasaka.github.io/plugins/backtick_code_block.rb:13:in `render_code_block&#39;</span>
</span><span class='line'>  from /app/rails_projects/blog/rasaka.github.io/plugins/octopress_filters.rb:12:in <span class="sb">`</span>pre_filter<span class="s1">&#39;</span>
</span><span class='line'><span class="s1">  from /app/rails_projects/blog/rasaka.github.io/plugins/octopress_filters.rb:28:in `pre_render&#39;</span>
</span><span class='line'>  from /app/rails_projects/blog/rasaka.github.io/plugins/post_filters.rb:112:in <span class="sb">`</span>block in pre_render<span class="s1">&#39;</span>
</span><span class='line'><span class="s1">  from /app/rails_projects/blog/rasaka.github.io/plugins/post_filters.rb:111:in `each&#39;</span>
</span><span class='line'>  from /app/rails_projects/blog/rasaka.github.io/plugins/post_filters.rb:111:in <span class="sb">`</span>pre_render<span class="s1">&#39;</span>
</span><span class='line'><span class="s1">  from /app/rails_projects/blog/rasaka.github.io/plugins/post_filters.rb:166:in `do_layout&#39;</span>
</span><span class='line'>  from /home/vagrant/.rbenv/versions/2.1.0/gemsets/blog-octopress/gems/jekyll-0.12.1/lib/jekyll/post.rb:195:in <span class="sb">`</span>render<span class="s1">&#39;</span>
</span><span class='line'><span class="s1">  from /home/vagrant/.rbenv/versions/2.1.0/gemsets/blog-octopress/gems/jekyll-0.12.1/lib/jekyll/site.rb:200:in `block in render&#39;</span>
</span><span class='line'>  from /home/vagrant/.rbenv/versions/2.1.0/gemsets/blog-octopress/gems/jekyll-0.12.1/lib/jekyll/site.rb:199:in <span class="sb">`</span>each<span class="s1">&#39;</span>
</span><span class='line'><span class="s1">  from /home/vagrant/.rbenv/versions/2.1.0/gemsets/blog-octopress/gems/jekyll-0.12.1/lib/jekyll/site.rb:199:in `render&#39;</span>
</span><span class='line'>  from /home/vagrant/.rbenv/versions/2.1.0/gemsets/blog-octopress/gems/jekyll-0.12.1/lib/jekyll/site.rb:41:in <span class="sb">`</span>process<span class="s1">&#39;</span>
</span><span class='line'><span class="s1">  from /home/vagrant/.rbenv/versions/2.1.0/gemsets/blog-octopress/gems/jekyll-0.12.1/bin/jekyll:264:in `&lt;top (required)&gt;&#39;</span>
</span><span class='line'>  from /home/vagrant/.rbenv/versions/2.1.0/gemsets/blog-octopress/bin/jekyll:23:in <span class="sb">`</span>load<span class="s1">&#39;</span>
</span><span class='line'><span class="s1">  from /home/vagrant/.rbenv/versions/2.1.0/gemsets/blog-octopress/bin/jekyll:23:in `&lt;main&gt;&#39;</span>
</span></code></pre></td></tr></table></div></figure>


<p>現状のロケールを確認。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>locale -a
</span><span class='line'>locale: Cannot <span class="nb">set </span>LC_CTYPE to default locale: No such file or directory
</span><span class='line'>locale: Cannot <span class="nb">set </span>LC_MESSAGES to default locale: No such file or directory
</span><span class='line'>locale: Cannot <span class="nb">set </span>LC_COLLATE to default locale: No such file or directory
</span><span class='line'>C
</span><span class='line'>POSIX
</span><span class='line'>en_US
</span><span class='line'>en_US.iso88591
</span><span class='line'>en_US.iso885915
</span><span class='line'>en_US.utf8
</span></code></pre></td></tr></table></div></figure>


<p>ja_JP.utf8を利用出来るようにする。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>sudo localedef -f UTF-8 -i ja_JP ja_JP.utf8
</span><span class='line'><span class="nv">$ </span>locale -a
</span><span class='line'>C
</span><span class='line'>POSIX
</span><span class='line'>en_US
</span><span class='line'>en_US.iso88591
</span><span class='line'>en_US.iso885915
</span><span class='line'>en_US.utf8
</span><span class='line'>ja_JP.utf8
</span><span class='line'><span class="nv">$ </span>locale
</span><span class='line'><span class="nv">LANG</span><span class="o">=</span>ja_JP.utf8
</span><span class='line'><span class="nv">LC_CTYPE</span><span class="o">=</span><span class="s2">&quot;ja_JP.utf8&quot;</span>
</span><span class='line'><span class="nv">LC_NUMERIC</span><span class="o">=</span><span class="s2">&quot;ja_JP.utf8&quot;</span>
</span><span class='line'><span class="nv">LC_TIME</span><span class="o">=</span><span class="s2">&quot;ja_JP.utf8&quot;</span>
</span><span class='line'><span class="nv">LC_COLLATE</span><span class="o">=</span><span class="s2">&quot;ja_JP.utf8&quot;</span>
</span><span class='line'><span class="nv">LC_MONETARY</span><span class="o">=</span><span class="s2">&quot;ja_JP.utf8&quot;</span>
</span><span class='line'><span class="nv">LC_MESSAGES</span><span class="o">=</span><span class="s2">&quot;ja_JP.utf8&quot;</span>
</span><span class='line'><span class="nv">LC_PAPER</span><span class="o">=</span><span class="s2">&quot;ja_JP.utf8&quot;</span>
</span><span class='line'><span class="nv">LC_NAME</span><span class="o">=</span><span class="s2">&quot;ja_JP.utf8&quot;</span>
</span><span class='line'><span class="nv">LC_ADDRESS</span><span class="o">=</span><span class="s2">&quot;ja_JP.utf8&quot;</span>
</span><span class='line'><span class="nv">LC_TELEPHONE</span><span class="o">=</span><span class="s2">&quot;ja_JP.utf8&quot;</span>
</span><span class='line'><span class="nv">LC_MEASUREMENT</span><span class="o">=</span><span class="s2">&quot;ja_JP.utf8&quot;</span>
</span><span class='line'><span class="nv">LC_IDENTIFICATION</span><span class="o">=</span><span class="s2">&quot;ja_JP.utf8&quot;</span>
</span><span class='line'><span class="nv">LC_ALL</span><span class="o">=</span>
</span></code></pre></td></tr></table></div></figure>


<p>/etc/sysconfig/i18nを修正。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='diff'><span class='line'>$ vim /etc/sysconfig/i18n
</span><span class='line'><span class="gd">-LANG=&quot;en_US.UTF-8&quot;</span>
</span><span class='line'><span class="gi">+LANG=&quot;ja_JP.utf8&quot;</span>
</span></code></pre></td></tr></table></div></figure>


<p>/etc/sysconfig/i18nを再読み込みで解決。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>. /etc/sysconfig/i18n
</span></code></pre></td></tr></table></div></figure>




<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?t=chacrue-22&o=9&p=8&l=as1&asins=B00ENEGXUU&nou=1&ref=tf_til&fc1=0A0808&IS2=1&lt1=_blank&m=amazon&lc1=0099FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Vagrant packageで複製したboxのSSHレスポンスが遅い]]></title>
    <link href="http://blog.chacrue.com/posts/2014/slow-response-vagrant/"/>
    <updated>2014-01-17T00:14:55+09:00</updated>
    <id>http://blog.chacrue.com/posts/2014/slow-response-vagrant</id>
    <content type="html"><![CDATA[<p>構築済みのVagrant boxをvagrant packageで複製し、
IPだけ変更して起動したところ、eth1が起動しなかった。</p>

<p>加えて、問題対処後に起動するも、SSHのレスポンスが遅かった。</p>

<h3>box複製</h3>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>Mac<span class="nv">$ </span>vagrant package
</span><span class='line'>Mac<span class="nv">$ </span>vagrant box add copy_box package.box
</span><span class='line'>Mac<span class="nv">$ </span>rm package.box
</span></code></pre></td></tr></table></div></figure>


<p>複製元のVagrantfileからIPだけ変更して起動。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='diff'><span class='line'><span class="gd">-  config.vm.network :private_network, ip: &quot;192.168.33.11&quot;</span>
</span><span class='line'><span class="gi">+  config.vm.network :private_network, ip: &quot;192.168.33.12&quot;</span>
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='diff'><span class='line'>Mac$ vagrant up
</span></code></pre></td></tr></table></div></figure>


<h3>eth1が起動しない</h3>

<p>起動時にeth1が存在しないとのエラーが発生。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
</pre></td><td class='code'><pre><code class='diff'><span class='line'>[default] Configuring and enabling network interfaces...
</span><span class='line'>The following SSH command responded with a non-zero exit status.
</span><span class='line'>Vagrant assumes that this means the command failed!
</span><span class='line'>
</span><span class='line'>ARPCHECK=no /sbin/ifup eth1 2&gt; /dev/null
</span><span class='line'>
</span><span class='line'>Stdout from the command:
</span><span class='line'>
</span><span class='line'>Device eth1 does not seem to be present, delaying initialization.
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>Stderr from the command:
</span></code></pre></td></tr></table></div></figure>


<p>下記を削除してからvagrant packageをやり直す。<br/>
<a href="https://github.com/mitchellh/vagrant/issues/1777">https://github.com/mitchellh/vagrant/issues/1777</a></p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>Vagrant<span class="nv">$ </span>rm /etc/udev/rules.d/70-persistent-net.rules
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>Mac<span class="nv">$ </span>vagrant destroy
</span><span class='line'>Mac<span class="nv">$ </span>vagrant package
</span><span class='line'>Mac<span class="nv">$ </span>vagrant box remove copy_box
</span><span class='line'>Mac<span class="nv">$ </span>vagrant box add copy_box package.box
</span><span class='line'>Mac<span class="nv">$ </span>rm package.box
</span><span class='line'>Mac<span class="nv">$ </span>vagrant up
</span></code></pre></td></tr></table></div></figure>


<p>eth1が起動出来た。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>ifconfig eth1
</span><span class='line'>eth1      Link encap:Ethernet  HWaddr 00:00:00:00:00:00
</span><span class='line'>          inet addr:192.168.33.12  Bcast:192.168.33.255  Mask:255.255.255.0
</span><span class='line'><span class="nv">$ </span>ping 192.168.33.1 -c 1
</span><span class='line'>PING 192.168.33.1 <span class="o">(</span>192.168.33.1<span class="o">)</span> 56<span class="o">(</span>84<span class="o">)</span> bytes of data.
</span><span class='line'>64 bytes from 192.168.33.1: <span class="nv">icmp_seq</span><span class="o">=</span>1 <span class="nv">ttl</span><span class="o">=</span>64 <span class="nb">time</span><span class="o">=</span>0.179 ms
</span><span class='line'>
</span><span class='line'>--- 192.168.33.1 ping statistics ---
</span><span class='line'>1 packets transmitted, 1 received, 0% packet loss, <span class="nb">time </span>0ms
</span><span class='line'>rtt min/avg/max/mdev <span class="o">=</span> 0.179/0.179/0.179/0.000 ms
</span></code></pre></td></tr></table></div></figure>


<h3>SSHレスポンスが遅い</h3>

<p>ただし、SSHのレスポンスが遅い。キーを押下しても一瞬待ってから表示される。<br/>
→google TOPへcurlしてみたが、通常と変わらない。<br/>
→ネットワーク自体は遅くない</p>

<p>Virtualboxで該当仮想マシンの設定を確認すると、下記のエラーが発生していた。</p>

<p><img src="http://blog.chacrue.com/images/screenshots/virtualbox-error-1.png" width="1024" height="711" title="Virtualbox error screenshot" alt="Virtualbox error screenshot"></p>

<p>→VagrantfileでI/O APIC有効化設定。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='diff'><span class='line'>  config.vm.provider :virtualbox do |vb|
</span><span class='line'>    vb.customize [&quot;modifyvm&quot;, :id, &quot;--memory&quot;, &quot;1024&quot;]
</span><span class='line'>    vb.customize [&quot;modifyvm&quot;, :id, &quot;--cpus&quot;, 2]
</span><span class='line'><span class="gi">+   vb.customize [&quot;modifyvm&quot;, :id, &quot;--ioapic&quot;, &quot;on&quot;]</span>
</span><span class='line'>  end
</span></code></pre></td></tr></table></div></figure>


<p>vagrant reloadで再起動→SSHのレスポンスが通常通りとなった。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>Mac<span class="nv">$ </span>vagrant reload
</span></code></pre></td></tr></table></div></figure>




<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=0A0808&lc1=0099FF&t=chacrue-22&o=9&p=8&l=as1&m=amazon&f=ifr&ref=qf_sp_asin_til&asins=B00F418SQ8" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[VagrantでNFSマウント出来ない]]></title>
    <link href="http://blog.chacrue.com/posts/2014/nfs-mount-error/"/>
    <updated>2014-01-13T19:01:58+09:00</updated>
    <id>http://blog.chacrue.com/posts/2014/nfs-mount-error</id>
    <content type="html"><![CDATA[<p>ホストとの共有は <a href="http://mitchellh.com/comparing-filesystem-performance-in-virtual-machines">NFSの方がパフォーマンスが良い</a> らしいので、<br/>
Vagrantfileで設定してみたところ、エラーが発生してNFSマウント出来ない。</p>

<p>※追記あり（2014/1/23）</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>Mac<span class="nv">$ </span>vim Vagrantfile
</span><span class='line'>config.vm.synced_folder <span class="s2">&quot;/Users/xxx/app/&quot;</span>, <span class="s2">&quot;/app/&quot;</span>, nfs: <span class="nb">true</span>
</span></code></pre></td></tr></table></div></figure>


<p>下記エラーが発生。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>Mac<span class="nv">$ </span>vagrant up
</span><span class='line'><span class="o">[</span>default<span class="o">]</span> Exporting NFS shared folders...
</span><span class='line'>NFS is reporting that your exports file is invalid. Vagrant does
</span><span class='line'>this check before making any changes to the file. Please correct
</span><span class='line'>the issues below and execute <span class="s2">&quot;vagrant reload&quot;</span>:
</span><span class='line'>
</span><span class='line'>Can<span class="err">&#39;</span>t open /etc/exports
</span></code></pre></td></tr></table></div></figure>


<p>ホスト側で/etc/exportsを作成（空ファイルでよい）</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>Mac<span class="nv">$ </span>sudo touch /etc/exports
</span></code></pre></td></tr></table></div></figure>


<p>NFSは起動していた。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>Mac<span class="nv">$ </span>sudo nfsd status
</span><span class='line'>nfsd service is enabled
</span><span class='line'>nfsd is running <span class="o">(</span>pid 3697, 8 threads<span class="o">)</span>
</span></code></pre></td></tr></table></div></figure>


<p>起動していなかった場合は以下を実行。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>Mac<span class="nv">$ </span>sudo nfsd <span class="nb">enable</span>
</span></code></pre></td></tr></table></div></figure>


<p>別エラー発生。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>Mac<span class="nv">$ </span>vagrant reload
</span><span class='line'><span class="o">[</span>default<span class="o">]</span> Exporting NFS shared folders...
</span><span class='line'>Preparing to edit /etc/exports. Administrator privileges will be required...
</span><span class='line'><span class="o">[</span>default<span class="o">]</span> Mounting NFS shared folders...
</span><span class='line'>The following SSH <span class="nb">command </span>responded with a non-zero <span class="nb">exit </span>status.
</span><span class='line'>Vagrant assumes that this means the <span class="nb">command </span>failed!
</span><span class='line'>
</span><span class='line'>mount -o <span class="s1">&#39;vers=3,udp&#39;</span> 192.168.33.1:<span class="s1">&#39;/Users/xxx/app&#39;</span> /app
</span><span class='line'>
</span><span class='line'>Stdout from the <span class="nb">command</span>:
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>Stderr from the <span class="nb">command</span>:
</span><span class='line'>
</span><span class='line'>mount.nfs: access denied by server <span class="k">while </span>mounting 192.168.33.1:/Users/xxx/app
</span></code></pre></td></tr></table></div></figure>


<p>sudo nfsd checkexports→vagrant reloadで解決<br/>
<a href="https://github.com/mitchellh/vagrant/issues/1744">https://github.com/mitchellh/vagrant/issues/1744</a></p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>Mac<span class="nv">$ </span>sudo nfsd checkexports
</span><span class='line'>Mac<span class="nv">$ </span>vagrant reload
</span><span class='line'><span class="o">[</span>default<span class="o">]</span> Exporting NFS shared folders...
</span><span class='line'>Preparing to edit /etc/exports. Administrator privileges will be required...
</span><span class='line'><span class="o">[</span>default<span class="o">]</span> Mounting NFS shared folders...
</span></code></pre></td></tr></table></div></figure>


<p>起動後、マウント出来ていることを確認。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>Vagrant<span class="nv">$ </span>df -h /app
</span><span class='line'>Filesystem                     Size  Used Avail Use% Mounted on
</span><span class='line'>192.168.33.1:/Users/xxx/app  466G   48G  417G  11% /app
</span></code></pre></td></tr></table></div></figure>


<h3>追記(2014/1/23)</h3>

<p>OS再起動時に再発。</p>

<p>Mac OS側の/etc/exportsを確認してみると、Vagrantが自動生成している許可設定内のIP(10.0.2.15)と
Vagrant up時に実行されているmountコマンドでのNFSサーバIP(192.168.33.1)とでネットワークが異なっている。</p>

<p>許可していないのだからdenyしますよね…。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>Mac<span class="nv">$ </span>cat /etc/exports
</span><span class='line'><span class="c"># VAGRANT-BEGIN: </span>
</span><span class='line'><span class="s2">&quot;/Users/xxx/app&quot;</span> 10.0.2.15 -alldirs -mapall<span class="o">=</span>501:20
</span><span class='line'><span class="c"># VAGRANT-END: </span>
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="o">[</span>default<span class="o">]</span> Mounting NFS shared folders...
</span><span class='line'>The following SSH <span class="nb">command </span>responded with a non-zero <span class="nb">exit </span>status.
</span><span class='line'>Vagrant assumes that this means the <span class="nb">command </span>failed!
</span><span class='line'>
</span><span class='line'>mount -o <span class="s1">&#39;vers=3,udp&#39;</span> 192.168.33.1:<span class="s1">&#39;/Users/xxx/app&#39;</span> /app
</span><span class='line'>
</span><span class='line'>Stdout from the <span class="nb">command</span>:
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>
</span><span class='line'>Stderr from the <span class="nb">command</span>:
</span><span class='line'>
</span><span class='line'>mount.nfs: access denied by server <span class="k">while </span>mounting 192.168.33.1:/Users/xxx/app
</span></code></pre></td></tr></table></div></figure>


<p>とりあえず、Mac OS側で/etc/exportsを手動変更。<br/>
→仮想マシン側の192.168.33.0/24のIPを許可</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='diff'><span class='line'>Mac$ sudo vim /etc/exports
</span><span class='line'><span class="gi">+ &quot;/Users/xxx/app&quot; 192.168.33.12 -alldirs -mapall=501:20</span>
</span></code></pre></td></tr></table></div></figure>


<p>手動でmountコマンド実行。<br/>
→マウント出来た。</p>

<p>ただ、これだと格好悪いので、Vagrantfileで綺麗に指定出来ないものだろうか。</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>Vagrant<span class="nv">$ </span>sudo mount -o <span class="s1">&#39;vers=3,udp&#39;</span> 192.168.33.1:<span class="s1">&#39;/Users/xxx/app&#39;</span> /app
</span><span class='line'>Vagrant<span class="nv">$ </span>df /app
</span><span class='line'>Filesystem                    1K-blocks     Used Available Use% Mounted on
</span><span class='line'>192.168.33.1:/Users/xxx/app 487712928 49724160 437732768  11% /app
</span></code></pre></td></tr></table></div></figure>


<h3>バージョン</h3>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>Mac<span class="nv">$ </span>vagrant --version
</span><span class='line'>Vagrant 1.4.1
</span><span class='line'>Mac<span class="nv">$ </span>sw_vers
</span><span class='line'>ProductName:  Mac OS X
</span><span class='line'>ProductVersion: 10.9.1
</span><span class='line'>BuildVersion: 13B3116
</span><span class='line'>
</span><span class='line'>Vagrant<span class="nv">$ </span>cat /etc/redhat-release
</span><span class='line'>CentOS release 6.5 <span class="o">(</span>Final<span class="o">)</span>
</span></code></pre></td></tr></table></div></figure>


<h3>VagrantのBox</h3>

<p><a href="https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box">https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box</a></p>

<iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&nou=1&bg1=FFFFFF&fc1=0A0808&lc1=0099FF&t=chacrue-22&o=9&p=8&l=as1&m=amazon&f=ifr&ref=qf_sp_asin_til&asins=B00F418SQ8" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

]]></content>
  </entry>
  
</feed>
