English digest of the my blog posts 2013 oct to aug

I writen blog to software topics. Main theme is ubuntu and other.
Write japanese.
This page is English digest.
2013/10~8


Build Wine32bit

Ubuntu12.04 i386, WINE 1.7.8 32bit.

Tips build append procedule on Ubuntu 13.10.
Edit change to package manager setting text file.
sudo vi /etc/apt/sources.list.d/ubuntu-wine-ppa-saucy.list
in
"# deb-src http://ppa.launchpad.net/ubuntu-wine/ppa/ubuntu saucy main"
remove "#".

and other tips.

WINE notepad

Installing gstreamer-sdk and voice transfer ssh tunnel

(gstreamer-sdkの導入および、SSHによる音声の転送)



Build libssh2

In Ubuntu 13.04


Portable OpenCV develop environment

(USBメモリで持ち運べるOpenCV開発環境)

Release envidronment directory archives it in github.
Download is OpenCV version 2.2 and 2.4.6.

OpenCV simple develop directory and sctipts in one directory.
Compatible Windows and Linux (Ubuntu).
Relative path to OpenCV library and MinGW compiler. (Windows)

Installing many OpenCV cause dll hell.
This is avoid dependent machine, environment.

OpenCV build and camera



Note PC modding on the dual drive. SSD and HDD

(DVDドライブにHDDを格納して、ノートPCをSSD+HDDの2台搭載に改造)

HDD and mounter into space removing DVD drive.


SATA HDD mounter for drive space

English digest of the my blog posts 2013 dec to oct

I writen blog to software topics. Main theme is ubuntu and other.
Write japanese.
This page is English digest.
2013/12~10

POST from the fancyBox Form

 and Sample source.

fancyBox dialog sample message form


Ubuntu setting Suspend shortcut key

Release auto setting script. it in github. in add_shortcut.sh.

Shortcut key setting menu gui.


Ubuntu snap to impossible capture screen shots (configure timer shot)

Release auto setting script. it in github.in add_shortcut.sh.
Impossible screen shots is :
Canceling PrintScreen key apps. (example: calender widget)
Disappear window view because of send keys. (example: Menu bar).

Impossible shot (Ubuntu calender widget)


Ubuntu version shift 13.10 to 12.04

I shift to Ubuntu older version.
Failure to can't move user data.
Use of the package for newer Ubuntu.( not better technique)

This is danger technique. Example :  Ubuntu is broken.
Target package or there dependencies (search to depend package to use synaptic package manager).
Ubuntu packages page( or google search)
Keyword [ package_name ubuntu_version Ubuntu packages ] etc.
Download and install to .deb package.

Failure Liferea open browser and resolution setting


Liferea setting menu select browse

Failure Compress Big Zip file Error

Big zip archive (2GB over) Ubuntu 12.04, thereupon unpacking error for windows7.
Use of the zip archiving library package for newer Ubuntu.( not better technique)
Ubuntu12.04 "zip" package is 3.0-4.
Shift to zip 3.0-7(from Ubuntu 13.04) package


Package Dependencies


PCハードウェアを更新

PCハードウェアを更新しました。

新CPUを認識しているUbuntuの詳細画面




そもそもは64bit環境環境でWINEのビルドがしたかっただけなのですが、システムの調子が悪くなってしまったため、思い切ってハードウェアを更新しました。
消費電力は下がると思われますが、前回の構成から0.1Ghz クロックが落ちます。



新規購入したのは以下のパーツです

CPU:
  AMD  A8 6500
  Quad Code 3.5GHz (Turbo 4.1GHz)
マザーボード:
  ASRock FM2A85X Extreme4
  MiniATX, DDR3 x4スロット, SATA6.0G, CrossFire/HDMI/USB3.0
電源:
  玄人志向 KRPW-PT850W/92+
  80 PLUS : PLATINUM 認証
AMD  A8 6500
ASRock FM2A85X Extreme4
稼働状態

Ubuntu12.04 およびUbuntu13.10 にて、すべて問題なく動作しています。

2013年12月にUbuntu12.04をインストールした雑記(PPAの追加ほか)
にて言及しましたが、デュアルディスプレイにした際に、メインウィンドウがDVIではなくD-sub15ピン側になるのは、きっとそれをデフォルトにする何らかの理由があるのでしょう。

fancyBoxで装飾したフォームからPOSTを送信する


fancyBoxを使えば、ポップアップするコメント入力ダイアログなどを作ることができます。


下記サンプルを実行すると表示される入力ボックス


ユーザからの入力を受け取るには、POSTメッセージを使用します。
POSTメッセージの受信にはPHPが必要なので、サンプルはphpコードです。
phpを動作させるには、Webサーバ上に配置して、ブラウザからアクセスする必要があります。
当然ながら、本サンプルもWebサーバ上で使用する必要があります。

Ubuntu環境でapache2およびphpを導入するには以下のコマンドを実行します。
$ sudo apt-get install libapache2-mod-php5 -y


サンプル


サンプルを配置するディレクトリはWebサーバの公開ディレクトリ内であればどこでも構いません。
ただし、fancyBoxのディレクトリと相対パスが合っている必要があります。
(またはサンプル側のパスを修正する)
もし、下記のディレクトリ構成で配置するならば、
http://localhost/fancyBox/demo/formpost.php
にてブラウザからサンプルにアクセスすることができるはずです。

ディレクトリ構成

/var/www/
        fancyBox/
                demo/
                        formpost.php

本サンプルは、fancyBoxに付属しているデモページが指定している相対パスをそのまま使っています。


コード

<!DOCTYPE html>
<html>
<head>
    <title>fancyBox inline form POST</title>
    <meta http-equiv="Content-Type"content="text/html; charset=UTF-8" />

    <!-- Add jQuery library -->
    <script type="text/javascript"src="../lib/jquery-1.10.2.min.js"></script>
    <!-- Add fancyBox main JS and CSS files -->
    <script type="text/javascript"src="../source/jquery.fancybox.pack.js?v=2.1.5"></script>
    <link rel="stylesheet"type="text/css"href="../source/jquery.fancybox.css?v=2.1.5" media="screen" />

    <!-- fancyboxクラスにデフォルトの効果を適用 -->
    <script type="text/javascript">
        $(document).ready(function() {
            $('.fancybox').fancybox();
        });
    </script>
</head>
<body>

    <?php
        /*POSTされたコメントを表示する関数*/
        capture_comment();
    ?>

    <h1>fancyBox inline form POST</h1>

    <p>
        fancyBoxで表示したインラインフォームからPOST送信するサンプル
    </p>
    <a class="fancybox"href="#inline1">Inline form へのリンク</a>

    <div id="inline1"style="width:400px;display: none;">
        <h3>form POST用 インラインフォーム</h3>
        <p>
            インラインフォーム サンプル コメント投稿欄
        </p>
        <form action="<?php echo basename($_SERVER['PHP_SELF']) ?>?comment=true"
        method="post" enctype="multipart/form-data">
            COMMENT:<br/>
            <input type="text"name="comment"size="30" /><br/>
            <input type="submit"value="コメントをPOST" />
        </form>
    </div>

    <p>
        fancybox official site: <a href="http://fancybox.net/">fancybox.net</a></p>
    </p>

<?php
    /*POSTされたコメントを表示する関数*/
    function capture_comment(){
        if (!isset($_POST["comment"])){
            return false;
        }
        $eComment = nl2br(htmlspecialchars($_POST["comment"], ENT_QUOTES));
        print ("$eComment");
    }
?>

</body>
</html>
Coloring by SSSH

はじめてCodeMirrorを動かした際の手順とサンプルのソース

Webページ上で使用できるテキストエディタが欲しくなったので、既存のものを探したところ、CodeMirrorが良さそうだったので、まずは導入までの手順を確認しました。

(ただしbloggerに導入する方法はまた別の話なので、下のコードサンプルはWeb上にあるSSSHで変換したものです。)


CodeMirrorによる入力補完



プロジェクトディレクトリを作成

プロジェクトディレクトリ的なものを作り、シンプルな index.html を作成しておきます。

CodeMirrorはHTML, CSS, JavaScriptしか使用しないので、apacheなどのWebサーバがなくても、index.html ほか必要なファイルを格納したディレクトリがあれば、CodeMirrorを試すことができます。
今回はUbuntu12.04上でapache2を使用している前提で説明を行います。そうでない方は適切にディレクトリパスを読み替えてください。

管理者権限が必要ですが、以降、適切なパーミッションを設定して作業してください。
$ mkdir -p /var/www/prj/
$ cd /var/www/prj/
$ vim /var/www/prj/index.html

CodeMirrorを入手

CodeMirrorを導入します。
公式サイトから圧縮ファイルを取得しても良いのですが、今回はGitを使いました。
プロジェクトディレクトリに入った状態で git clone します。
$ git clone https://github.com/marijnh/CodeMirror.git

本番サイトでは、必要な最低限の lib, mod, css ファイルだけを置くべきなのですが、今回は公開するのではなく導入して動作確認するだけなので、すべて入ったリポジトリをページのディレクトリ直下に置いてしまいます。

CodeMirrorサンプルの確認

CodeMirroのソースには、多くのサンプルページが付属しています。今回はHTML5をオートコンプリートするサンプルを参考にしました。
でもページのファイルは「 CodeMirror/demo/html5complete.html 」です。
デモは公式のデモページ、またはオフラインでも見ることができます。
(該当サンプルはHTML5を対象としているので、JavaScriptとcssも効果が有効になっています。)
プロジェクトディレクトリの準備の項目と同じ条件で作っていれば、ブラウザで
http://localhost/prj/CodeMirror/demo/html5complete.html
にアクセスすれば、公式デモと同じページをオフラインで見ることができると思います。

このサンプルは、devタグ要素を置き換えてtextareaを作成し、サンプルコード自身を読み込んで表示するという仕組みになっています。
実際にCodeMirrorを使用するにあたっては、これらの設定を書き換える必要があります。


CodeMirrorを使う

index.htmlに組み込む

WebページをHTMLで書いて、その中でCodeMirrorを呼び出します。
HTMLソースはページの下に置いておきました。

オートコンプリートのキーバインドは、サンプルで割り当てられている Ctrl+Space とします。
Ubuntuデスクトップの場合、Ctrl+Spaceには日本語入力モード切り替えのショートカットが割り当てられています。このままではCodeMirrorのオートコンプリートを試すことができないので、設定を削除しておきます。

サンプルページの確認方法

以上の手順が済んでいれば、あとはCodeMirrorの動作を確認するだけです。

Apache2 Webサーバを導入して上記ディレクトリ構成に配置した場合、
 http://localhost/prj/CodeMirror/demo/html5complete.html
にて作成したサンプルページを確認することができます。

ApacheなどのWebサーバを導入していない場合でも、前述の通りCodeMirrorおよび今回のサンプルはJavaScriptのみを使用しているため、index.htmlをブラウザで直接開けば動作を確認することができます。

HTML要素の補完候補を表示


サンプルプロジェクトの構成

サンプルプロジェクトのディレクトリ構成

/var/www/                (apache2 のディレクトリ)
                prj/        (プロジェクトディレクトリ)
                        index.html        (ページ本体)
                        CodeMirror/               (CodeMirrorのリポジトリ)
                                mods/               (CodeMirrorのリポジトリ)
                                libs/               (CodeMirrorのリポジトリ)




index.html ソース

<!doctype html>
<html>
<head>

    <!-- CodeMirrorのコア部分を読み込む -->
    <script src="CodeMirror/lib/codemirror.js"></script>
    <link rel="stylesheet"href="../CodeMirror/lib/codemirror.css">
    <script src="CodeMirror/mode/javascript/javascript.js"></script>

    <!-- 使用したい言語のアドオンを読み込む -->
    <link rel="stylesheet"href="../CodeMirror/addon/hint/show-hint.css">
    <script src="../CodeMirror/addon/hint/show-hint.js"></script>
    <script src="../CodeMirror/addon/hint/xml-hint.js"></script>
    <script src="../CodeMirror/addon/hint/html-hint.js"></script>
    <script src="../CodeMirror/mode/xml/xml.js"></script>
    <script src="../CodeMirror/mode/javascript/javascript.js"></script>
    <script src="../CodeMirror/mode/css/css.js"></script>
    <script src="../CodeMirror/mode/htmlmixed/htmlmixed.js"></script>

</head>
<body>

    CodeMirror Test.<br>
    <br>

    <!-- CodeMirrorで効果を加える対象のテキストエリア(ID属性を付与) -->
    <textarea id="myTextarea"></textarea>

    <!-- CodeMirror適用。対象のtextareaをID属性で指定 -->
    <!-- HTMLの表示と入力補助、入力補完、行番号を有効化 -->
    <script type="text/javascript">
        var myCodemirro = CodeMirror.fromTextArea(
            document.getElementById('myTextarea'), {
                mode: 'text/html',
                extraKeys: {"Ctrl-Space": "autocomplete"},
                lineNumbers: true
        });
    </script>

</body>
</html> 

上のカラーリングはCodeMirrorではなく、自作した静的ハイライト生成サービスの SSSH を使っています。
JavaScriptを使わずに静的にシンタックスハイライトしたい場合や、CodeMirrorを導入できない環境である方は、そちらをどうぞ。

サスペンドをショートカットに追加する(Ubuntu12.04)

PCが起動するのを待ちたくないので、いつもシャットダウンではなくサスペンドを使用しています。
Ubuntuにはサスペンド機能のショートカットや設定項目が存在しません。そこで、サスペンドを行うキーボードショートカットを Ubuntu に追加する設定をしました。

追記:Githubにてサスペンドのショートカットを簡単に追加できる bashスクリプトを公開しました。
サスペンドをショートカットに設定するスクリプト(簡易版)を実行した結果

サスペンドを行うためのコマンドを探し、それをキーボードショートカットに登録します。
環境は Ubuntu 12.04 です。

コマンドによるサスペンド

サスペンドのコマンドはこちらから。すぐに見つかります。
下記コマンドでサスペンド可能であることを確かめてください。
(注意:成功すればサスペンドします。失敗するとシステムが停止することもあり、再起動しなければならなくなるので注意してください。)
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

コメントによると、「pmiコマンドのソースを覗いたらこうやっていたよ」ということのようです。将来この方法が使えなくなった際に困らないよう、素直にpmiコマンドを導入しておいたほうが良いかもしれません。
とはいえ、上記コマンドを使用する今回の方法では、下記のインストールは不要です。
sudo apt-get install powermanagement-interface

また、検索によく引っかかる「 apt-get install hal 」も、Ubuntu 12.04環境では不要かと思われます。
すくなくとも私の環境では不要だったのですが、ハードウェア環境によっては必要になるのかもしれません。

当然ながら、通常操作によるサスペンドに失敗するハードウェア環境では、コマンドによるサスペンドも上手く行きません。事前に確認してください。


キーボードショートカットへの登録

コマンドライン上で gconftool-2 を使用して、ショートカットキーを設定します。
システムのキーボードからショートカットを追加してもよいのですが、今回はコマンドラインにて作業を行います。

以下のコマンドにて設定ファイルに書き込むことで、キーボードショートカットを使用することができます。


サスペンドのキーボードショートカット設定は以下の通りです。
#設定を書き込む前に、gconfデーモンを停止させておく
$ gconftool-2 --shutdown
#ショートカット設定の名前
$ gconftool-2 -t str --set /desktop/gnome/keybindings/custom1/name "サスペンド"
#割り当てるキー
$ gconftool-2 -t str --set /desktop/gnome/keybindings/custom1/binding "<CTRL><SHIFT><ALT>l"
#割り当てるコマンド
$ gconftool-2 -t str --set /desktop/gnome/keybindings/custom1/action 'dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend'


上記のコマンドを実行すると、ショートカットの情報を記録した設定ファイルが作成されます。
Ubuntu 12.04における設定ファイルへのパスはこちらに。
以下のコマンドで設定ファイルを見ることができます。
(Ubuntu 12.10から、設定ファイルのパスが変わっているようです。)
less  ~/.gconf/desktop/gnome/keybindings/custom1/%gconf.xml

上記の設定が追記されているのを確認できると思います。
「設定」からも、GUI上でショートカットキーが追加されているのを確認できます。

$ gconftool-2 --shutdown 」コマンドを打たずにショートカットキーを登録すると、gnomeデスクトップの表示がおかしくなる場合があります。
これは、ログアウトするか再起動すれば直ることがあります。
直らなかった場合、GConfの設定を、ディレクトリごと破棄すると解決します。
(下記のコマンドはバックアップを行っている。)
$ mv ~/.gconf/ ~/.gconf-back
デフォルト値にリセットするコマンドも存在するようですが、私の環境では上手くいきませんでした。

メニューバーなどの表示がおかしくなってしまったGnomeデスクトップ

デフォルトで存在するショートカット項目の設定は、別の場所に保管されているらしく、上記の設定削除を行ってもリセットされません。
また、デフォルトのショートカット項目と、カスタムショートカットでキーの割り当てが被る場合、デフォルトの項目が優先されます。
その他の設定ファイルおよびディレクトリのパスについては、以下が詳しいです。
http://docs.oracle.com/cd/E19253-01/819-0665/gconf-0/index.html


複数のショートカットキーを登録したい場合、gnoftool-2に指定する設定の custom1 の数字の部分を変更します。
シェルスクリプトで自動設定するならば、事前にキーの存在を確認して上書きを避けるように書くかと思います。今回は人間が作業したので、作業者が目視確認すれば十分でした。


シェルスクリプト版

おまけとして、以下にキーボードショートカット設定シェルスクリプトのサンプルを置いておきます。


#!/bin/bash
#キーボードショートカット設定スクリプト
#

#設定前にgconfデーモンを停止させておかないと、
#gnomeデスクトップ表示が乱れて元に戻らなくなることがある(Ubuntu12.04にて確認)
gconftool-2 --shutdown





#パスの custom* は、重複するものが他にあれば上書きされる。
#上書きを避けたければ事前にチェックする必要がある。
gconftool-2 -t str --set /desktop/gnome/keybindings/custom1/name "サスペンド"
gconftool-2 -t str --set /desktop/gnome/keybindings/custom1/binding "<CTRL><SHIFT><ALT>l"
gconftool-2 -t str --set /desktop/gnome/keybindings/custom1/action 'dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend'

gconftool-2 -t str --set /desktop/gnome/keybindings/custom2/name "タイマー撮影でスクリーンショットを撮る"
gconftool-2 -t str --set /desktop/gnome/keybindings/custom2/binding "<Super>Print"
gconftool-2 -t str --set /desktop/gnome/keybindings/custom2/action 'gnome-screenshot --delay=5'


以上です。

PrintScreenキーでは撮れないスクリーンショットを撮る(Ubuntu12.04でコマンドによるタイマー撮影)

追記:Githubにて「スクリーンショットのタイマー撮影」ショートカットを簡単に追加できる bashスクリプトを公開しました。

通常、スクリーンショットを撮りたければPrintScreenキーを押すだけで十分です。

しかし、UnityのDash、メニューバーを展開した状態、Webページのドロップダウンリスト、ポップアップメッセージなどを撮りたい場合、PrintSceenキーではこれらのスクリーンショットを取得することができません。

具体例としては、PrintScreenキーでは、上に載せたようなカレンダーウィジェットのスクリーンショットを撮ることができないと思います。試してみてください。


Ubuntu12.04のカレンダーウィジェット

スクリーンショットが撮れない状態では、PrintScreenキーを押しても無視されます。
あるいはPrintScreenキーを押す操作によってキャプチャしたい操作状態がキャンセルされてしまい、スクリーンショットを撮ることができない場合もあります。

コマンドによるタイマー撮影

以下のコマンドを使えば操作中のスクリーンショットを簡単に取得することができます。
$ sleep 5 ; gnome-screenshot


カメラの「タイマー」相当の機能を、コマンドによって実現しています。
このコマンドを実行すると、5秒後にスクリーンショット撮影のエフェクトが発生し、デスクトップにスクリーンショット画像が作成されているはずです。
この方法ならばさらに、両手が必要でスクリーンショットを撮ることができない操作であっても、PrintScreenキーを押せない状態でスクリーンショットを撮ることができます。

GIMPのメニューバーを開いた状態のスクリーンショット



コマンドラインから実行できるスクリーンキャプチャには、他にも、
import xwd scrot shutter
などがありますが、「http://d.hatena.ne.jp/ohnishiakira/20110120/1295536656」にて紹介されているように、import, xwdには「ウィンドウの透過がスクリーンショットに反映されず、綺麗なスクリーンショットが撮れない」という問題が起こります。
また、 scrot や Shutter は使用する前にインストールしておく必要があります。

gnome-screenshot はUbuntuにデフォルトでインストールされているため、ソフトウェアを追加でインストールする必要がありません。

ただし、 VirtualBox 4.3環境で Unity デスクトップを撮れないようです。
上手く行かなかったら他のアプリケーションを試しましょう。

VirtualBox4.3 Unity デスクトップにてスクリーンショット取得失敗の様子


なお、gnome-screenshot コマンド自体のオプションにタイマー撮影機能が存在します。
わざわざsleepを使ったのはなんとなくです。
トップウィンドウのみをキャプチャするオプションも存在します。
ただし、ウィンドウ領域からはみ出すと、バーや通知は見切れてしまいます。
基本的には全画面をキャプチャしたスクリーンショットを取得してから、GIMPなどで切り出す手法を取るのが確実です。


キーボードショートカットでタイマー撮影ができる設定を行う

設定の「キーボード」から「ショートカット」を選択して、
Shift+PrintScreenを割り当ててしまいました。

ショートカット追加のボタンと、スクリーンショットのショートカット


ショートカットで実行するコマンドには、連続する複数のコマンドは指定できません。
そこで、gnome-screenshotの持つタイマー撮影オプションを使用します。
コマンド(O)に、
gnome-screenshot --delay=5
を書き込みます。
秒数は使いやすいように調整してください。

独自のショートカット設定を追加

ショートカットキーはわかりやすいように、「選択領域のスクリーンショットを撮る」に使われているショートカットの Shift+Print を 割り当てることにしました。
私はこの機能を使わないのでショートカットキーの割り当てを上書きしてしまいましたが、それで困る場合は別のショートカットキーを割り当ててください。

ショートカットキーの割り当て

 以上で、ショートカットキーによるタイマー撮影を実現することができます。

2013年12月にUbuntu12.04をインストールした雑記(PPAの追加ほか)

Ubuntu12.04.3は最新の長期サポートバージョンであり、「いまさら」というのもおかしい話ではあるのですが。
Ubuntu13.10から環境を移行することにしました。




13.10を導入して使っていたのですが、USBスタートアップディスクの作成やKDEサウンドデーモンが落ちるのは単に不便と思うだけですが、Geditが落ちるとか何かおかしいとしか思えません。
(あと、VirtualBox4.3.4のゲストでWINEのコンパイルをかけていたらゲストやホストが落ちたのも理由のひとつです。こちらはソフトウェアではなく電源がヘタっていたのが原因だったのですが。最新のVirutalBoxを無理やり導入したり、HDDの調子も悪かったため、原因がわかるまでに時間がかかってしまいました。)


本記事はPPAリポジトリの導入リストがメインです。
PPAで解決しなかった問題をfixした防備録でもあるため、そちらは参考になるかと。(あまり参考にすべきでない強引な方法ですが。)

ロングサポートとはいえ(というかそれゆえに)、12.04LTSは一部のパッケージ(具体例としては、Mozillaスイートとchromium-browser)を除いて、アプリケーションがもう1年半も前のバージョンです。
デスクトップとして使用するには、PPAの導入が現実的かと思います。
たぶんLTSをデスクトップで使用するユーザは、多かれ少なかれ、PPAリポジトリを導入しているものと思います。
PPAの導入は便利ですが、システムの故障や侵入を含めて自己責任とのことですので、そのあたりはご留意ください。


ダイジェスト:
・Liferea RSSビューワ
・revelation パスワードマネージャ
Ubuntu13.10で使っていた設定ファイルが、Ubuntu12.04で引き継げない問題

・アーカイブマネージャ
Ubuntuで圧縮した大きめのzipファイル(圧縮後2GB程度)が、Windowsで解凍できない問題

・Squidプロキシサーバ
 原因究明中。

ハードウェア周辺、またはOSの通常セットアップ

インストールできるのか
AMDのA10メインなので少し心配だったのですが、まったく問題ありませんでした。カーネルのバックポートなどもあるのかもしれません

mdadm lvm2については心配しておりません。
...大丈夫ですよね? (今のところ大丈夫)

なんだかUbuntuインストールの雑記記事が増えていました。
Ubuntu13.04 インストール時の雑記
Ubuntu 13.04再インストール時の雑記
Ubuntu13.10インストールの雑記
これらのあれこれを作業。スクリプト便利。でも手作業もまだ必要。

基本的に設定は、
Ubuntu 12.04をインストールした直後に行う設定 & インストールするソフト
にてまとめてくださっている方がいるので、ほしい設定を導入していきます。

また、日時表示の設定はSerendip Web Studio様からコマンドにて。

USBサウンドデバイスは、12.04では元から問題なし。
Skypeのインストールは下に譲ります。


インストール後、いつもの起動スクリプトにてシステムのセットアップ作業。
Wacomタブレットのデュアル構成およびデュアルディスプレイ環境も問題なく動作。
ついでにホイールへのキーマッピングも行っておきました。





アプリケーションの導入

アプリケーション設定の移行は、基本的にはホームディレクトリの下の隠しファイルをコピーするだけで終了します。
(~/.thunderbird  など。chromium-browser などの一部アプリケーションは ~/.configの下に存在する。)
ただし、一部アプリケーションはバージョン違い(バージョンダウン)が原因で、この方法では設定を移行することができませんでした。

Firefox, Chromium-browser, Thunderbird

Ubuntu12.04でも最新版が提供されており、問題ありませんでした。


VirtualBox

むしろ13.10版がいつまでも提供されないのが12.04LTSに戻した理由のひとつだったりします(12/04現在)。
4.1.12
リポジトリ登録は、公式の手順に従って行います。

以下を、 /etc/apt/sources.list に追記。
(バージョンによって微妙に記述が異なる箇所があるので注意)
deb http://download.virtualbox.org/virtualbox/debian $(lsb_release -sc) contrib

あとはいつもの手順でホストを設定すれば、問題なく最新版のVirtualBoxを使用出来ます。

カーネルアップデート後に以下のコマンドの実行を求められるかもしれません。
/etc/init.d/vboxdrv setup
そういえばUbuntu13.10ではこのコマンドに久しくお目にかからなかったような気がしますが、気のせいでしょうか。


GIMP, Krita, MyPaint

GIMPでレイヤーグループが使えないのは不便ですので、GIMP2.8を導入します。
GIMP2.8に関しては自分でビルドしてもよいのですが、やはりOSの右クリックなどから呼び出せたほうが便利なので、PPAを追加することにします。

GIMPのPPAリポジトリはすぐに見つかります。
sudo add-apt-repository ppa:otto-kesselgulasch/gimp
sudo apt-get update
sudo apt-get install gimp -y


KritaのPPAは、公式サイトのダウンロードページに案内があります。
sudo add-apt-repository ppa:kubuntu-ppa/backports
sudo apt-get update
sudo apt-get install krita -y


MyPaintはテスト版で良ければ以下のPPAから。
sudo apt-add-repository "deb http://ppa.launchpad.net/achadwick/mypaint-testing/ubuntu $(lsb_release -sc) main "
sudo apt-get update

sudo apt-get install mypaint -y
あるいは自分でビルドしても良いと思います。


PPAによるGIMP2.8とKrita2.7
Ubutnu12.04 PPAを導入する前のKritaアイコン


どうでもいい話ですが、KritaはPPAの新しいバージョンのほうが見た目が良いです。
GIMPのMLでも黒色ベースのUIテーマを取り込む話が出ていたので、次のバージョンあたりで変わるのかもしれません。


Skypeクライアント

バイナリパッケージをwgetしてきて導入、という手順もありますが、partnerリポジトリを有効にする方法のほうが楽です。
sudo apt-add-repository "deb http://archive.canonical.com/ $(lsb_release -sc) partner"
sudo apt-get update
sudo apt-get install skype -y


skypeを立ち上げると、利用規約の同意を求める画面と、ログイン画面が表示されます。
そこを通ればSkypeを使用することができます。
Skype上での「自動起動」設定はうまく行かないことがあるので、gnome-session-propertiesで自動起動に登録するほうが良いと思います。

他にpartnerリポジトリにはdropboxも用意されているので、簡単にインストールできるようになります。

Ubuntu版Skypeの利用規約画面



TortoiseGit(RabbitVCS) (ついでにTortoiseHG)

rabbitvcs-nautilus 0.13.1-2 -> 0.15.3-2
導入しても動いていないようなので、リポジトリを追加して最新版を導入します。
また、公式サイトにnautilus3にはrabbitvcs-nautilus3が必要と書いてあります。(Ubuntu12.04はnautilu3.4.2なのですが、なぜかrabbitvcs-nautilus3が提供されていない。)
http://wiki.rabbitvcs.org/wiki/install/ubuntu
導入は以下の手順。
sudo add-apt-repository ppa:rabbitvcs/ppa
sudo apt-get update
sudo apt-get install rabbitvcs-nautilus3 -y
nautilus -q
次にnautilusを起動した時からGitで管理しているディレクトリへのアイコン表示が有効となります。

TortoiseHg 標準搭載バージョン:2.2-1
PPAのサイトは以下。
https://launchpad.net/~tortoisehg-ppa/+archive/releases
導入は以下の手順。
sudo add-apt-repository ppa:tortoisehg-ppa/releases
sudo apt-get update
sudo apt-get install tortoisehg -y
nautilus -q

Gitリポジトリ状態表示の様子


WINE

何も問題はありませんでした。
公式サイトの案内に従い、PPAを導入します。
sudo add-apt-repository ppa:ubuntu-wine/ppa
sudo apt-get update
sudo apt-get wine1.7 -y


Liferea RSSビューワ

問題発生。
Ubuntu13.10で使っていた設定ファイルを読めないようで、 起動に失敗します。

そこで、PPAを導入してバージョンを上げてみたのですが、PPAで提供されるバージョンが、
12.04 PPA版:1.8.7
Ubuntu13.10:1.8.15
となっており、13.10と同じバージョンは提供されていないようです。

仕方がないので、配信元一覧をファイルにエキスポートして、Ubuntu12.04にてインポートする移行作業を行いました。
エキスポートは、「購読(S)」から「配信元一覧のエキスポート(E)」
インポートはこのすぐ上にあるのですぐわかります。
既読・未読の情報は消えてしまいますが、配信元一覧は問題なく移行することができました。

私の環境だけなのかもしれませんが、Lifereaには昔から「デフォルト設定ではページをWebブラウザで開けない」問題があります。
解決するには設定変更を行います。
メニューバーから「ツール(T)」の「設定(P)」を開き、タブから「ブラウザ」を選択します。
ブラウザ(B)の項目を手動に変更し、手動(M)の設定を、使用したいブラウザに変更します。
例えばchromiumの場合は以下のように書き換えます。
chromium-browser %s

以上で、LifereaからWebブラウザでRSS配信されたWebページが開けるようになります。

Lifereaのブラウザ設定画面


revelation パスワードマネージャ

問題発生。
Ubuntu13.10環境で使用していたパスワードファイルをUbuntu12.04のrevelationで使おうとすると、エラーが出てファイルを開くことができません。
バージョンは以下のようになっていました。
Ubuntu12.04: 0.4.11
Ubuntu13.10: 0.4.13
パスワードマネージャというアプリケーションの性質上、あまりPPAを入れたくありません。

エクスポートしたパスワードファイルのインポートに失敗する

エキスポート時、「暗号化されていないXMLファイルに吐き出す」旨の警告が出ますが、エキスポートを実行。
しかし、このパスワードファイルをUbuntu12.04のrevelationにインポートしようとすると、エラーダイアログ「Invalid file format / The file 'パスワードファイルパス' contains invalid data.」が表示されて失敗してしまいます。

新バージョンのUbuntu用のdebパッケージを12.04に導入する

そこで、Ubuntu12.04用でない、バージョンの新しいUbuntu向けのdebパッケージを、無理やりUbuntu12.04に導入することにします。
まず、該当するUbuntuパッケージのページを、以下の検索キーワードで検索をかけて探します。
「アプリケーション名 ubuntu Ubuntuバージョン名 パッケージに関する詳細」
今回の場合は、「revelation ubuntu raring パッケージに関する詳細」となります。
Ubuntuパッケージのページ(パッケージ: revelation (0.4.13-1.2) [universe])からAMD64アーキテクチャを選択して、アジアのサーバから.debファイルをダウンロードします。
ダウンロードしたら、破損の可能性も含め、念のためチェックサムを確認しておきましょう。
Ubuntuソフトウェアセンターまたは、dpkgコマンドにて直接インストールを強行します。
 インストール後、 revelationを起動して、パスワードファイルを読み込めることを確認しました。

とはいえ、サポート期間中のUbuntuでPPAに最新版が存在しない場合、単にそれをパッケージングする人がいないことが理由ではなく、深刻な不具合が理由ということもありえます。
自分で対処する自信がなければ、この方法は使わないでください。
特に、システムの動作に影響を与えるようなパッケージでこの方法を使ってはいけません。



Squidプロキシサーバ

1.204時点ですでにsquid3だったようです。
13.10で作った設定ファイルをそのままコピーして設定ファイルを上書きし、
sudo squid3 -k parse
しても警告を吐かなかったのでsquid3を再起動。
Ubuntuを設定。
ブラウザがプロキシ接続できないとエラーを吐く。
後で直します。


アーカイブマネージャ(Windowsとのzipファイルのやりとり)

Linuxで作成したzipファイルがWindowsで解凍できない問題が発生していました。
(「OSに十分な領域がありません。これらのファイルをコピーするには、さらに734PB必要です」と表示される。)
とりあえず13.10では解決しています。
12.04登場当時からこの現象が発生していたことは覚えていました。まだ解決していなかったようです。

なお、この問題、圧縮して2GBになるような巨大ファイルを扱うときだけ現れる現象のようで、圧縮前32MB程度の小さなファイルで実験しても再現しません。


仕方が無いので、reverationパスワードマネージャと同じく、より新しいUbuntu用のパッケージを導入して解決することにしました。
とはいえ、「アーカイブマネージャ」の正式なアプリケーション名がわからなければパッケージを検索にかけられません。
また、アーカイブマネージャはあくまでUIであり、各圧縮形式の圧縮と伸張はそれぞれ専用のライブラリなどに移譲しているはずです。

まず、「アーカイブマネージャ」の正式なアプリケーション名をヘルプ(H)から「このアプリケーションについて(A)」にて表示させます。

アーカイブマネージャの情報ダイアログ

 続いて、synapticパッケージマネージャを開き、依存関係からzip圧縮を行なっているライブラリを特定します。
コマンドならば以下の通り。
sudo apt-get synaptic -y
sudo synaptic
synapticパッケージマネージャを導入します。また、これを使用するには管理者権限が必要です。
クイック検索から「fireroller」を右クリックし、依存関係の中からzipの圧縮に関係ありそうなパッケージを探します。


今回の場合、「zip」というパッケージがzip圧縮を請け負っていそうです。
Ubuntu packagesページにて検索をかけた結果、Ubuntu12.04では「zip」debパッケージのバージョンは3.0-4であり、次以降のUbuntuにて順次パッケージバージョンが上がっています。Ubuntu12.10:3.0-6
Ubuntu13.04:3.0-7
順にインストールしていきました。
結果、3.0-6では結果は変わらず。3.0-7のインストールにて解決しました。(13.10のパッケージを導入すれば一発で解決したと思われますが、あまりバージョンが離れてしまうと、今度はこの「zip」パッケージの依存パッケージが変化することにより影響が大きくなってしまう可能性があります。そのため、問題が解決する最も近いバージョンを導入すべきで、むやみに最新版を選ぶべきではありません。
そもそもこの方法自体、使うべきではないのですが。)


Rhythmbox(同じ音楽ファイルが2重に表示される)

Ubuntu12.04とは関係ないかもしれませんが、今回のインストールではじめて遭遇した問題だったので、ここに記録しておきます。

WINEを導入すると、初期化時にz:ドライブ(Linuxシステムのルートディレクトリをマウントする)が作成されます。
z:ドライブが存在する状態でRhythmboxがホームディレクトリ下の音楽ファイルを探索すると、ルートの下にあるすべての音楽ファイルが楽曲リストに登録されるため、結果として同じファイルが2重に表示されてしまいます。

Rhythmboxの探索ディレクトリを解除する方法が見つからないので、設定を初期化して解決します。
設定を初期化するために設定ファイルを退避しようとしたのですが、ユーザディレクトリ直下には見つかりません。Ubuntuフォーラムにて以下の場所に格納されていることがわかりました。
${HOME}/.local/share/rhythmbox
このディレクトリをリネームまたは削除することで、Rhythmboxの設定を初期化できます。


Ubuntu12.04を再び使ってみた雑感

Unityのマルチディスプレイ対応が惜しいところだったと思います。
私のデュアルディスプレイ環境で、ウィンドウが右側のディスプレイに開いたためです。
メインで使っているのは左側だったのですが。
メインウィンドウの設定が、どこかにあるのかもしれません。
今回は Gnome Classic(no effects) に変更して対処。


Ubuntuはそのままで新マシンに移行したところ、 マルチディスプレイにてプライマリディスプレイが私の思惑と逆であったため、以下のコマンドを gnome-session-properties にてログオン時に実行するよう設定しました。(参考ページ)
xrandr --output DVI-0 --primary



Alt+F2にショートカットを、「システム」の「コマンド実行プロンプトを表示する」を割り当てました。以前のGnomeデスクトップではデフォルトで設定されていた気がします。
(ちなみに私はこのバーをアプリケーション実行だけでなく、Webページからのコピーペーストの際に不要なフォント効果を捨てるために使っています。文字列ロンダリングといったところでしょうか。)

Gnome「アプリケーションの実行」ウィンドウ


Gnome Classic にして戸惑ったのはスクリーンショットでした。PrintScreenキーを叩いた時に、ダイアログが出ないのはスクリーンショット取得に失敗しているのだと勘違いしてしまいました。(シャッター音は鳴るのですが)
実際には、ダイアログを出さずに直接ホームディレクトリにスクリーンショットの画像ファイルを吐き出すようになっていました。

Ubuntu12.04によるHDDチェック、RAIDの解除

自宅のメイン機に発生した障害の原因がHDDの故障であることが判明し、RAID0アレイを解除することになりました。
その際の記録です。


故障したHDDのSMART情報

Ubuntu環境におけるHDDチェック

LinuxでHDDのチェックを検索すると、出てくるのはfsckの使い方ばかりです。
しかしfsckはあくまでパーティション管理ツールであり、HDDそのものをセクタチェックしたい場合には役に立ちません。

UbuntuにはHDDのチェック機能を持った「ディスクユーティリティ」が標準でインストールされています。

「ディスクユーティリティ」にてHDD情報を表示したところ


情報を見たいHDDの「SMARTデータ(A)」をクリックすると、別ウィンドウが立ち上がり、HDDのSMART情報を閲覧することができます。
このウィンドウからディスク状態を知ることができ、チェックディスク(実態はよくわかりませんが)を実行することもできます。
(「SMARTデータ(A)」から「セルフテストを実行(S)」の「詳細(およそ数十分)(E)」を実行する。)

サーバを使用している場合や、Ubuntu以外のディストリビューションを使っていて同アプリケーションが使えない場合は、CUIでSMART情報を取得したり、SMART命令を発行できる smartctl コマンドを駆使することになるかと思います。

メイン機に発生した障害は、コンパイル中にマシンがパニックするというもので、最初はCPUを疑っていました。
ところが、ディスクユーティリティを見るとHDDのうちの一台が大きなエラー値を示しており、チェックディスクをかけたところ、席を立った短い間にUbuntuが再起動していました。
ほぼ犯人決定で良いと思います。


RAID0アレイを解除する

RAIDアレイの特定

RAIDシステムには、LinuxのmdadmによるソフトウェアRAIDを使用しています。これからそのRAID0アレイを解除していきます。

まず、対象のRAIDアレイを特定します。
私のマシンにはRAID0アレイとRAID1アレイが存在しているため、消すアレイを間違えると大変なことになります。

とりあえずお約束的なコマンドで、RAIDアレイの存在を確認。
$ sudo mdadm --detail --scan
ARRAY /dev/md/0 metadata=1.2 name=my-machine:0 UUID=xxxxxxxx:xxxxxxxx:xxxxxxxx:xxxxxxxx
ARRAY /dev/md/1 metadata=1.2 name=my-machine:1 UUID=yyyyyyyy:yyyyyyyy:yyyyyyyy:yyyyyyyy

こちらのコマンドにてアレイのRAIDレベルを確認します。
$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid0 sdd2[2] sdf2[1] sda2[0]
      1855976448 blocks super 1.2 512k chunks
     
md0 : active raid1 sdc1[2] sdb1[3]
      2929739776 blocks super 1.2 [2/2] [UU]

詳細を確認します。
$ sudo mdadm -D /dev/md/1
/dev/md/1:
        Version : 1.2
  Creation Time : Mon Jun  4 23:17:06 2012
     Raid Level : raid0
     Array Size : 1855976448 (1770.00 GiB 1900.52 GB)
   Raid Devices : 3
(途中略)
    Number   Major   Minor   RaidDevice State
       0       8        2        0      active sync   /dev/sda2
       1       8       82        1      active sync   /dev/sdf2
       2       8       50        2      active sync   /dev/sdd2


以上の出力を勘案すると、目的のRAID0アレイは/dev/md/1のようです。

RAIDアレイの使用法を確認するため /etc/fstab を見ます。
$ less /etc/fstab
上記コマンドにて確認してみたところ、(抜粋)
/dev/vg_raid0/lv_raid0 /raid0_array ext4 noatime 0 2

となっておりました。
つまりLVMがRAIDアレイの上に存在するようです。
今回は論理ボリュームの母体であるRAID0を解体することが決定しているので、LVMはRAIDアレイごと消滅させてしまうことにしました。


マウントの解除

まずはRAIDアレイ上のファイルシステムのマウントを解除します。
$ sudo umount /dev/vg_raid0/lv_raid0

RAIDアレイを停止させようとすると、以下のメッセージが表示されます。
$ sudo mdadm --misc --stop /dev/md1
mdadm: Cannot get exclusive access to /dev/md1:Perhaps a running process, mounted filesystem or active volume group?

どうやらLVMを停止させる必要があるようです。
LVMの論理ボリューム(LV)を停止
$ sudo lvscan
  ACTIVE            '/dev/vg_raid0/lv_raid0' [1.73 TiB] inherit
$ sudo lvchange -an /dev/vg_raid0/lv_raid0

今度こそRAIDアレイを停止させます。
$ sudo mdadm --misc --stop /dev/md1
mdadm: stopped /dev/md1

RAIDメタデータの削除
$ sudo mdadm --zero-superblock /dev/sd[afd]2

mdadmソフトウェアRAIDのメタデータを削除します。
RAIDメンバのHDDには、特定の箇所にそのHDDが所属する RAIDアレイに関する情報が記述されています。これをメタデータと呼びます。
LinuxのディスクユーティリティはRAIDアレイを不用意に削除しないよう、RAIDメタデータを検出したディスクの初期化を受け付けません。

起動時に自動マウントしている場合は、忘れずRAIDアレイのマウント設定を /etc/sftab から削除しておきます。
$ sudo vim /etc/fstab
vimが使えないならvimの箇所をgeditに置き換えます。


感想:
心臓に悪いので、次からはRAID1アレイを物理的に外してから作業しようと思います。


確認

念のためUbuntuを再起動して、RAIDアレイの消滅を確認しておきます。
( /etc/fstab の編集が間違っていない確認も兼ねています。)
$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdc1[2] sdb1[3]
      2929739776 blocks super 1.2 [2/2] [UU]
     
unused devices: <none>


問題なく消えているようです。
スーパーブロックのメタデータが削除されたことを確認したければ、partedコマンドなどでパーティションテーブルを書きこんでみればよいかと思います。


RAID0アレイの構築

ここから先はおまけです。






"Read Error Rate"の値
(「0でなければ異常値」と説明に書いてある)


ところでこの値のどこが"Good"なのか、誰か教えてください。
(注:SMART値の取得は各HDDメーカおよび製品によって異なります。型番レベルで命令が異なる場合すらあるそうです。そういった事情もあり、SMARTの値は必ずしも信用できるものではありません。詳しい事情はCrystal Dew Blog 様のところでたまに記事になっています。)

まず、ディスクユティリティにて、対象のHDDのブロックデバイスをパスで把握します。

$ sudo blkid
接続されているブロックデバイス上のパーティションの一覧を表示する。
パーティションの作られていないHDDを表示できないなど、これひとつでは情報が足りないが、雑かつ大まかに全体を捉えるのにちょうど良い。

$ sudo parted
printにて、ハードディスク情報の概要とパーティション構成を把握することができる。

$ ls -l /dev/disk/by-id
HDDのシリアルナンバーを取得する。
物理的なHDDの挿抜作業をするにあたってHDDを識別するために必須のコマンドです。
RAID環境では物理的なHDDの識別ミスがありがちです。同種HDDの一括購入により、故障時に取り外すべきHDDを識別する必要がありますが、ブロックデバイス名が印字されているわけではないので、困難を極めます。
(ちなみに私は、HDDの先頭領域に小さなパーティションを作って、そのUUIDをHDDに印字しておく、という方法を取っていました。)

ディスクユーティリティにてブロックデバイスのパスを把握する
今回は、解除した際と同じ /dev/sda/dev/sdf のようです。

念のため、事前に「SMARTデータ(A)」から「セルフテスト(C)」の「詳細なチェック」をかけておきましょう。

RAIDメンバになる予定のHDDをディスクチェック

チェックの終わった /dev/sda/dev/sdf をまとめてRAID0アレイを構築します。

新しいRAIDアレイのためにデバイスノードを作成し、そこへmdadmコマンドで2つのブロックデバイスを集約します。
なお、私はHDD上にパーティションを切って、パーティションをRAIDアレイのメンバにするようにしていますが、HDD上のすべての領域をRAIDアレイにしてしまうのならば、パーティションを切らずに直接ブロックデバイスを指定しても構いません。
$ sudo mknod /dev/md1 b 9 1
$ sudo mdadm --create /dev/md1 --level=0 --raid-device=2 /dev/sd[af]2
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.


RAID0アレイが構築できていることを確認します。
$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid0 sdf2[1] sda2[0]
      1237318656 blocks super 1.2 512k chunks
     
md0 : active raid1 sdc1[2] sdb1[3]
      2929739776 blocks super 1.2 [2/2] [UU]
     
unused devices: <none>


確かにRAID0アレイが出来ているようです。

RAID0アレイを利用するために、ext4ファイルシステムを作成してマウントします。
$ sudo mkfs -t ext4 /dev/md1
$ sudo mount /dev/md1 /raid0_array

無事にマウントされていれば、ディレクトリ "lost+found" が存在しているはずです。
$ ls /raid0_array
lost+found

ファイルを書きこんでみます。
まず、chownでRAIDアレイ上のディレクトリの所有者を自分に変更します。
その後、touchコマンドで空のファイルを作成します。
$ sudo chown $LOGNAME:$LOGNAME -R /raid0_array
$ touch /raid0_array/test

ファイルシステム上に"test" ができていることを確認できれば成功です。
$ ls /raid0_array

lost+found  test

起動時に自動マウントするように、RAID0アレイ上のファイルシステムを/etc/fstabに登録します。
後で確認するために、まずは手動でマウントしたファイルシステムをアンマウントします。
$ sudo umount ~/raid0_array
次に、blkidにてRAID0アレイに作成したファイルシステムのUUIDを調べます。
$ sudo blkid
/dev/md1: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4" 

わかったUUIDを下に、自動マウントの設定を以下のように記述します。
$ sudo vim /etc/fstab
UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"  /home/hibi/raid1 ext4 noatime 0 2

以下のコマンドにて、/etc/fstabに設定されたマウント処理を行います。
$ sudo mount -a

マウント先のディレクトリ上に、アンマウント前と同じファイルが存在していれば、自動マウントの設定は成功です。
$ ls /raid0_array

lost+found  test


念のためOSを再起動して確認しましょう。

以上で、mdadmによるRAID0アレイを構築して使用することができるようになります。

Ubuntu12.04 32bit環境でWINEをビルドする手順(WINE 1.7)

とりあえずUbuntu12.04の32bit環境にて、32bit版WINEのビルドに成功したので、手順ほかを途中経過として記事にまとめたものを公開しておきます。
64bit版の手順が構築できたら、そちらをあらためて公開する予定です。
(2014/01追記:64bit  Ubuntu環境で32bit Wineをビルドする手順の記事を書きました)

64bit環境にて32/64bit混合版WINEをビルドできるはずなのですが、そちらはインストールの段階でエラーを吐いて失敗しています。原因はたぶんライブラリ不足です。


以下、32bit版WINEのビルド手順。
64bit版の草稿を含む。

WINE付属のメモ帳を起動した状態


イントロダクション

Ubuntu12.04および13.10にて、GitリポジトリのWINE最新版をビルドする手順を確認しました。
不具合報告やその修正確認以外にも、単純に最新版を試したい気分の時に、必要になることもあるかと思われます。

今回はWINEをビルドするため仮想マシン上にクリーンな環境を用意しました。最低限、競合するWINEのパッケージは削除しておきましょう。


公式WIKIに書かれたビルド手順は、いくつも存在し、各ページごとに異なっています。
参考にしたものを、以下に一覧にしました。

ビルドガイド(Installing Wine from source)
見ればわかるとおり、WINEのビルドに特別な工程は特にありません。
とはいえ、このページは書いてあることが少なすぎるので、実作業の際にはあまり参考にはなりません。そこで、以下のページの記述を参考にします。

WineOn64bit(Building 32-bit Wine on a 64-bit (x86-64) system)
64bitホスト環境でのWINE32bitのビルド方法、特にlxcコンテナ内におけるwine32のビルド手順について解説しています。

BuildingBiarchWineOnUbuntu(Building Biarch (Shared WoW64) Wine On Ubuntu)
Ubutnu環境でlxcコンテナを使用して、WINE32およびWINE64のビルドと、組み合わせての導入手順についてまでを解説しています。
(2013/11時点で、lxc環境で必要な手順が説明から抜けています。WineOn64bitには書いてあるのですが。)

レグレッションテスト(Regression Testing)
さらに詳細な手順やビルドオプションが必要な場合はこのページが役に立ちます。

追記:
Win64 Support for Wine
こちらが正しい64bit版WINEのビルド手順のように見えます。
現在確認中。


WINE 32bitをビルド

ソースの取得

Gitはあらかじめインストールしておきます。
sudo apt-get install git -y
GitリポジトリからWINE最新版ソースを取得します。
git clone git://source.winehq.org/git/wine.git ~/wine-git

ビルドに必要な依存パッケージの導入

wine/ppaを導入することで、WINE最新版のビルドに必要な依存パッケージのリスト情報が追加されます。
sudo add-apt-repository ppa:ubuntu-wine/ppa

この時、Ubuntu13.10環境では追加の手順が必要となります。記事下方のTIPSを参照してください(他の環境でもbuild-depが失敗する場合はこれが原因かもしれません)。

変更後、パッケージリストを更新し、依存パッケージの追加を行います。
sudo apt-get update
sudo apt-get build-dep wine1.7 -y


2013年11/30時点で、"build-dep wine"すると、wine1.6が自動選択されてしまいます。最新版wine1.7を明示的に指定します。build-depのパッケージ名には、Ubuntu上のWINEの最新版に合わせてバージョンを付与します。
最新版で追加されてbuild-depに足りないものがあれば、configureの出力に指示どおり個別にインストールします。

作業用ディレクトリにてconfigureおよびmake

ビルド作業を行い、ビルド済みバイナリを置くためのディレクトリを作成します。
作業ディレクトリに移動して、WINEソースのconfigureを実行します。
mkdir ~/wine32-tools
cd ~/wine32-tools
~/wine-git/configure

作業ディレクトリにMakefileなどが展開されるので、makeします。
並列化数はビルド環境のCPU数と同程度にしておきます。
make -j4

「Wine build complete.」
が出れば成功です。
(明示的に"エラー"と表示せずにコンパイルが途中で止まることがある。)

Install

インストールも特別なことはなく、通常のmakeコマンドです。
sudo make install

実行
ビルドしたWINEは作業ディレクトリの直下に存在します。
./wine --version
にてバージョンが確認できればビルド成功です。

(ちなみに、本記事の手順を公開前に確認したところ、12/07時点でWINEのバージョンが上がっていたため、バージョンに" wine-1.7.8 "が表示されました。)


Windowsアプリケーションを実行したい場合、./wineの後に引数として与えればパッケージ版のWINEと同じように使用することができます。

付属のメモ帳を起動してみます。
./wine notepad

WINEの初期設定にて、MonoとGeckoのインストールダイアログが表示され、「インストール」を選択すると、自動でダウンロードされてインストールされます。
なお、私のビルドした wine-1.7.8 ではMonoのインストールに失敗したのですが、Notepadが起動し、特に問題はありませんでした。

WINE Geckoインストーラのダイアログ


TIPS

WINEビルドのためのbuild-depに失敗する (Ubuntu13.10)

Ubuntu13.10では追加手順が必要です (12.04では不要なようです)。
リポジトリを追加した際、デフォルトでは追加された deb-src が無効にされているため、build-depにて "wine1.7(最新版WINE)" を取得することができません。
コメントアウトを外して設定ファイルの deb-src を有効化する必要があります。
テキストエディタとしてviを使う場合は以下のようにします。
sudo vi /etc/apt/sources.list.d/ubuntu-wine-ppa-saucy.list

具体的な書き換え内容としては、上記テキストファイル内の
# deb-src http://ppa.launchpad.net/ubuntu-wine/ppa/ubuntu saucy main
行の先頭の#を外します。
" sudo apt-get update "から続きの手順を行えば、build-dep による依存パッケージの導入に成功するはずです。

ccacheの導入

コンパイル時に使用する情報をキャッシュすることで、再ビルドを高速化します。
不具合報告をするなど、2度以上コンパイルすることがありそうならば導入しておくとよいです。
使用するなら、ccacheを追加で導入。
sudo apt-get install ccache -y

使い方は、configureの前にオプションとして追記する。
上記の手順のうち、configure部分を下記のものに置き換える。
CC="ccache gcc" ~/wine-git/configure

add-apt-repositoryが見つからない場合

LXCゲスト環境のUbuntu 12.04にて発生した問題です。
software-properties-common を入れても「 add-apt-repositoryが無い 」エラーが出てWINEのリポジトリを追加できない場合は、
sudo apt-get install python-software-properties
にて、 add-apt-repository を導入することができます。


WINE設定の初期化の落とし穴?(あるいはインストーラが途中で落ちる不具合の解決)

不具合報告のためにWINE環境のリセットを行ったところ、Fixされているはずの現象が出現しました。
試した結果、~/.wine ディレクトリに隠しファイルがあり、これを消すことで解決しました。

不具合の詳細ですが、インストーラが起動して「インストーラが起動しています」のあと、インストーラが終了します。
コンソール上で実行すると、以下のエラーが表示されていました。
fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.Windows.Common-Controls" (6.0.0.0)

これはMSI(MSインストーラ)およびInstallSieldで起こる問題だと書いてあるページがヒットします。
NetFramework3.5のレポートに従って「winetricks, msxml3, dotnet35­」を入れろ
wine32bitをセットアップしろ
などの対応策が書いてありますが、実はこの問題、既に解決(fix)されているようです。
というか、1.7.7で実際動いたことからして、この問題は解決しています。

そして、対処法に書いてあるとおり .netを入れようとしても、winetickが動きません。

$ winetricks
------------------------------------------------------
wine cmd.exe /c echo '%ProgramFiles%' returned unexpanded string '%ProgramFiles%' ... can be caused a corrupt wineprefix, an old wine, or by not owning /home/USERNAME/.wine
------------------------------------------------------



最終的に、以下の方法で解決。
隠しファイル "~/.wine/.update-timestamp" を消します。
rm -rf ~/.wine/*
rm -rf ~/.wine/.update-timestamp

上記のエラーで動かなかったインストーラも以下の方法で完走を確認しました。

正直、WINEが悪いとは思いにくく、私の使っているディレクトリ構成が少し普通でないためだと思うのですが、ワークアラウンドとして書き残しておこうと思います。

squid3プロキシサーバの設定(Ubuntu13.10)

Ubuntu13.10でsquid3パッケージが提供されており、パッケージ名からコマンドまですべてsquid3になっています。
(たしかそれなりに前からこうであったはず。)


Ubuntuのネットワーク設定とプロキシ設定

インストールは以下のコマンドを打つだけです。
sudo apt-get install squid3 -y

インストール後、プロキシ設定を行っていきます。

設定ファイルの書き換え

私の場合、主に以下の設定を変更しています。
設定ファイルを書き換える際、すべて読むには長すぎるため、検索を使うべきです。
設定ファイル中の設定名で検索をかけて、行を追記または書き換えています。

テキストエディタとしてvimが使えない場合、デスクトップ環境ではgeditが使用できます。
sudo gedit /etc/squid3/squid3.conf


プロキシのポート番号を変える

デフォルト設定:
http_port 3128
変更例:
http_port 58080

ポート番号の変更は、攻撃に対する対応として、念のためにデフォルトから変更しておきます。実際にはたいした効果はないと思いますが。
一応、ポート番号は50000番代から先が自由に使用可能となっているので、50000番以降のポート番号に変更しています。

メモリ上のキャッシュ総量を増やす

デフォルト設定
# cache_mem 256 MB
変更例
cache_mem 2048 MB
 キャッシュがメモリ上にあったほうが、高速にウェブを閲覧することができます。
単純な方法として、メモリキャッシュのサイズを増やします。
私はいつも、以下の行を追記して設定を変更しています。

メモリにキャッシュするファイルのサイズ上限を増やす

デフォルト設定
# maximum_object_size_in_memory 512 KB
変更例
maximum_object_size_in_memory 2048 KB
 大きなファイルをメモリキャッシュしてメモリをすぐに使い果たすことを防ぐために、メモリキャッシュするファイルにはサイズ上限が設定されています。
画像ファイルなどがメモリキャッシュされるように、サイズを増やしておきます。

キャッシュディレクトリのパスとキャッシュサイズを変更する

デフォルト設定
#cache_dir ufs /var/spool/squid3 100 16 256
変更例
cache_dir ufs /raid0_array/squid_cache 40960 16 256

キャッシュディレクトリにはいくつかの設定項目がありますが、主に変更するのは、パスとキャッシュサイズです。

パスはデフォルト設定のままでも構いません。
ただし、SSDを使用していて、頻繁に読み書きされそうなプロキシキャッシュを置きたくない場合や、キャッシュファイルを置く空き容量の余裕がない場合には、パスの変更が効果的です。
私の環境ではRAID0アレイを構築してあります。キャッシュを置く領域は広くて早いほうが良いので、RAID0アレイ上のディレクトリをキャッシュに使用するようにパスを変更しています。

キャッシュサイズはMB単位で、デフォルトでは100MBしか用意されていません。
ディスクの空き容量を見ながら、できるだけ大きなキャッシュサイズを指定します。

キャッシュ対象にするファイルの最大サイズを増やす

デフォルト設定
# maximum_object_size 4 MB

変更例


maximum_object_size 64 MB

大きなファイルほど、キャッシュがヒットした時に大きな効果を得ることができます。
一方で、HDD領域の使用量も増えることになります。

大きなzipファイルやインストーラなどは通常、一回きりしかダウンロードしないため、キャッシュするのは無駄になります。
一度しかダウンロードしないであろうファイルタイプについては、キャッシュルールの変更で対応します。

キャッシュルールの変更


 デフォルト設定
#refresh_pattern (\.deb|\.udeb)$   129600 100% 129600
変更例
refresh_pattern (\.deb|\.udeb)$   129600 100% 129600

Ubuntuのsquid設定ファイルには、キャッシュルールのサンプルとして、debパッケージのキャッシュルールが記述されているため、コメントアウト(#)を外してキャッシュルールを有効化しておきます。
私の場合、仮想マシンゲストを運用することが多いため、.debパッケージファイルをキャッシュすることには十分に意味があります。通常の環境では、debパッケージを使用するのは一回きりになるので意味はありません。
また、APTパッケージマネージャが独自にキャッシュを持っているので、再インストールが多い場合にもsquid側でキャッシュする意味はありません。

設定の反映

squidデーモンの一時停止

 次のキャッシュディレクトリを作成コマンドは、squidが停止している時しか実行できないようになっています。
sudo service squid3 stop

設定ファイルをチェックする

変更した設定ファイルをsquidが読み込めるかどうか、設定ファイルの記述ミスをチェックすることができます。
squid3 -k parse
squid3になってから出力が増えましたが、基本的にはERROR行が出ていなければOKです。
 

キャッシュディレクトリの作成

キャッシュディレクトリのパスをデフォルト設定から変更した場合、キャッシュディレクトリを新たに作成する必要があります。
事前にmkdirなどで、ディレクトリを作成しておきます。
(設定ファイルに指定したパスまでは、ユーザがあらかじめ用意しておく必要があります。)
sudo mkdir -p /myraid0_array/squid_cache
キャッシュディレクトリをsquidに作成させます。
sudo squid3 -z
キャッシュディレクトリ(16x256個のネストしたディレクトリ構造と適切なパーミッション)を、squidが自動生成します。

Ubuntu13.10でプロンプトが帰ってこないように見えますが、コマンドは成功終了しています。(エンターキー押下などで確認できます)

Ubuntuのプロキシ設定

Ubuntuにプロキシ設定します。
「システム設定」から「ネットワーク」の「ネットワークプロキシ」を選択します。
「メソッド(M)」を「なし」から「手動」に切り替えます。
プロキシのURL(orアドレス)とポート番号の入力画面が出るので、URLに"localhost"、 ポート番号にはsquid設定ファイルの http_port で指定したポート番号を入力します。
最後に「システム全体に適用」するをクリックすれば、プロキシ設定がUbuntu上に反映されます。
(ただしAPTパッケージマネージャとGitクライアントには個別にプロキシ設定をする必要がある場合があります。)

Ubuntuのプロキシ設定

プロキシ設定の反映を確かめたければ、squidを立ち上げていない状態で、FireFoxなどでウェブブラウズできないことを確認すれば良いと思います。

squidデーモンの再起動

squidデーモンを起動します。
sudo service squid3 start

ウェブブラウズできるようになっていれば、設定成功です。



追加設定

広告ブロックの追加





設定ファイルの1060行あたり、 "http_access deny all"と書いてある箇所が、アクセス制御ルールの記述箇所です。

追加のルールは、以下の、コメントアウトされていない有効な deny all ルールより前に書きます。
# And finally deny all other access to this proxy
http_access deny all


以下はサンプルです。
(2013年現在で以下のブロックルールは(niconicoの広告URLが変わったためか)有効ではないので、あくまで記述例です。)

#(他の設定で接続が通ってしまうかもしれないのでブロックの記述は"http_access deny all"よりできるだけ上に書く)
#ニコニコ時報ブロック(2011.05.12変更)#from http://blog.nezweb.net/archives/118acl nicojihou url_regex -i ^http://.*nicovideo\.jp/.+marquee.*
acl nicojihou url_regex -i ^http://.*nicovideo\.jp/.+rotation.*
acl nicojihou url_regex -i ^http://.*nimg\.jp/.+marquee.*
acl nicojihou url_regex -i ^http://ad\.nicovideo\.jp/server/get\?.*
acl nicojihou url_regex -i ^http://api\.nicodic\.jp/.+
#ニコニコ時報ブロック
http_access deny nicojihou


#ニコニコ広告ブロック
#コメント部の広告が消えるらしい #http://ad.nicovideo.jp/
acl nicoad url_regex -i ^http://ad.nicovideo.jp/.*
#広告が(右上ごと)消えるはず #http://ads.nicovideo.jp/
acl nicoad url_regex -i ^http://ads.nicovideo.jp/.*
#画面の下のほうの画像を消します。
acl nicoad url_regex -i ^http://res.nimg.jp/img/base/foot/.*
#一部広告を消します。あまり効果はありません。
acl nicoad url_regex -i ^http://res.nimg.jp/img/ads/.*

http_access deny nicoad


ファイルキャッシュルールの変更

設定ファイルの4080行あたり、"refresh_pattern"と書いてある箇所がファイルキャッシュルールの記述箇所です。
(「^ftp」で検索すると一発でヒットします。)

設定の変更は、設定ファイル中の以下の記述、
#Suggested default:
refresh_pattern ^ftp:        1440    20%    10080

の下に追記することで行います。

以下はサンプルです。(適切に改行を消して使用してください。)


#画像ファイルと動画ファイルの保存時間を延長(仮)
#43200=30daysrefresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 10080 90% 43200  ignore-no-cache  ignore-private
refresh_pattern -i \.(iso|avi|wav|mp3|mp4|mpeg|swf|flv|x-flv)$ 43200 99% 432000  ignore-no-cache  ignore-private


#圧縮ファイルのキャッシュルール(短めに設定)
refresh_pattern -i \.(zip|rar)$ 10 2% 10  ignore-no-cache  ignore-private

#ニコニコキャッシュ用
#サムネイルと動画をキャッシュする(サムネ:smile?i= , 動画:smile?v=)
#最低保存期間14日、最長90日
refresh_pattern -i \.(smilevideo|nicovideo)\.jp\/(smile|watch) 26160 99% 129600  ignore-no-cache ignore-no-store ignore-private



問題が発生した場合などのTIPS

APTについて

デスクトップ環境では、システムのプロキシ設定をしていればAPTパッケージマネージャもプロキシ経由の接続を使用します。
Squidを停止して"apt-get update"を実行し、「W: http://archive.canonical.com/dists/saucy/Release.gpg の取得に失敗しました  localhost:58080 へ接続できません:」などとエラーを返すのを見ることで確認することができます。
デスクトップのないサーバ環境などの場合、apt-getコマンドをProxy経由で使用する方法にしたがって設定を行います。

VirtualBoxについて

NAT接続しているVirtualBoxゲストは、ホストのプロキシ設定を無視して、プロキシを経由せずネットワークに接続します。
(VirtualBoxアプリケーション側にあるプロキシ設定(「ファイル→環境設定→プロキシー」)は、VirtualBoxが自身のアップデートを確認するためのネットワーク接続に使用するプロキシの設定なのだそうです。)
プロキシを経由させる方法はいろいろとあるのですが、ホスト側でSquidの設定を書き換える必要もあると思われるため、検証と説明はいずれ。


Gitについて

Gitはホストのプロキシ設定を無視して、プロキシを経由せずネットワークに接続します。
プロキシ経由でGitを使用する場合、問題が発生するため、httpを使うかネットワーク接続を操作するアプリケーションを導入するとのことですが、今のところGitが使えなくなってはいないので、こちらも後回しにしています。

問題発生時

問題:何か問題が発生しました
対策:squidの使用を停止しましょう
冗談はともかく。

問題:画像サイトで表示される画像が壊れている。リロードしても解決しない
対策:壊れたsquidキャッシュをクリアしましょう。
Squidを停止
sudo service squid3 stop
キャッシュディレクトリを削除(キャッシュディレクトリのパスは適宜読み替える)
sudo  rm -rf /var/spool/squid/*
キャッシュディレクトリを再構成
sudo squid3 -z
Squidを再起動

sudo service squid3 start

問題:ウェブブラウズができない。Squidが原因かどうか知りたい
対策:FireFoxでプロキシを通さずウェブブラウズしてみてください
ツールバーから「編集」→「設定」を選択。
「詳細」の「ネットワーク」タブにプロキシを設定するための項目がある。
「接続設定(E)」のダイアログにて、「プロキシを使用しない(Y)」に設定変更
これでFireFoxからプロキシを通さずにWebページが見られるようであれば、Squidが原因。

なお、Squidが異常動作をする原因としては、キャッシュディレクトリが設定上限サイズまたはディスクの空き容量を使い切った場合が考えられるので、上記のキャッシュクリアの手順を行うと解決する場合がある。

Linuxコマンドライン上でSVGベクタ画像をJPG等へラスタライズ変換する

 Linuxコマンドライン上でSVGベクタ画像をJPG等へラスタライズ変換することができるが、上手く変換されない場合がある。   以前作った魔法陣イラスト素材をイラスト素材ストックサイトへ登録しようと思い立ち、改めて素材用にラスタライズ変換をかけようとした。   ラスタライズ変換...