docker の勉強 (2) docker のインストール

docker.io パッケージのインストール

Ubuntu - Docker Documentation

に書かれている通りインストールする。

sudo apt-get install docker.io

Version 0.9.1 がインストールされた。

リンクの作成

Ubuntu では docker.io という名前でインストールされる。"docker" で起動できるよう シンボリックリンクを作成する。

sudo ln -s /usr/bin/docker.io /usr/local/bin/docker

bash 補完設定

同じく bash の補完機能を docker.io というコマンド名だけでなく docker という コマンド名でも働かせるために設定を追加する。

sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io

上記は /etc/bash_completion.d/docker.io というファイルの末尾に 'complete -F _docker docker' という行を追加している。

動作確認

インストールが正常に行われたか以下のコマンドで確認する。

sudo docker run -i -t ubuntu /bin/bash

"ubuntu" というイメージがダウンロードされ、bash が(そのイメージから作成された) コンテナ内で実行されればOK。 ダウンロードに30分くらいかかったが、

root@96939a9b2829:/#

というプロンプトが表示された。問題ないようだ。

docker の勉強 (1) Ubuntu Server のインストール

docker を勉強してみたくなった。

OS のインストール

MacOSX 上でも動作するようだが Linux 上の方がシンプルな構成のようなので 勉強用には Linux が良さそうだ。 VirtualBox 上に Ubuntu Server 14.04 (x64) をインストールした。 GUI も欲しいので

Install GUI on Ubuntu server 14.04 Trusty Tahr

を参考に、以下のコマンドで Minimal GNOME Core Desktop をインストール。

sudo apt-get install xorg gnome-core gnome-system-tools gnome-app-install

初期設定

VirtualBox Guest Additions

sudo apt-get install linux-headers-generic
sudo apt-get install build-essential

でビルドに必要なファイルをインストールした後、

./VBoxLinuxAdditions.run

VirtualBox Guest Additions をインストール。

network-manager

/etc/network/interfaces の以下の2行をコメントアウトし、有線ネットワークを network-manager に管理させる。

auto eth0
iface eth0 inet dhcp

日本語環境

このままだと日本語が文字化けして表示されない。以下のコマンドで日本語環境、 フォント、IME(Mozc)をインストールする。

sudo apt-get install language-pack-gnome-ja
sudo apt-get install fonts-takao-gothic
sudo apt-get install language-selector-gnome
sudo apt-get install ibus-mozc

ログイン時に "GNOME Flashback (Metacity)" を選択した場合、何故か システム設定に "地域と言語" が現れず、入力メソッドに Mozc を 設定できない。一度 "System Default" でログインして "地域と言語" から 設定する。

Mac Spotlight を無効に

Macアクティビティモニタで mds というプロセスのディスクの読み込みバイト数が多かった。mdsというプロセスはどうやら Spotlight のようだが、Spotlight は使わないのでインデックス作成を止める方法を調べた。

参考ページ OS X MavericksのメールのCPU使用率が100%のままになる問題 - iPod LOVE

無効にする

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist

有効にする

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist

FreeRDP - プリンターのリダイレクト

Windows7 を稼働させるにはスペック不足の PC を再利用するため、 水銀室 Linuxで作るUSBブートのXenAppクライアント を参考にして RDP クライアントを作ろうとしている。 (リンク先の記事では XenApp だが、ここでは Windows 2012 の Remote Desktop Services に 接続することを考える)

要件

  • サーバー: Windows 2012
  • クライアント: Ubuntu (今回は 14.04 Server)
  • プリンターのリダイレクトができること
  • リダイレクトしたプリンターをデフォルトプリンターとする

最初は、remmina を使用したが、プリンターのリダイレクトが Windows 2012 への接続ではできなかった。 (Windows 2008 の場合は OK だったが...) そのため、FreeRDP を試してみたが、Ubuntu の apt-get でインストールされるバイナリー(1.0系)では 同じくリダイレクトは行えなかった。 そこで、開発元のページより、より新しいバージョンのソースコードをダウンロードして ビルドすることにした。

ビルド

cmake

master ブランチ の場合

cmake -DCMAKE_BUILD_TYPE=Debug -DCHANNEL_PRINTER=ON -DWITH_SSE2=ON -DMONOLITHIC_BUILD=ON -DBUILD_SHARED_LIBS=OFF -DWITH_CUPS=ON .

stable-1.1 ブランチの場合

cmake -DCMAKE_BUILD_TYPE=Debug -DCHANNEL_PRINTER=ON -DWITH_SSE2=ON -DMONOLITHIC_BUILD=ON -DBUILD_SHARED_LIBS=OFF -DWITH_CUPS=ON .

実行

./xfreerdp -sec-nla /v:xx.xx.xx.xx /kbd:Japanese +fonts +menu-anims +clipboard +window-drag +aero +decorations /printer

とりあえずいろいろ試して上記で Windows 2012 でもプリンターのリダイレクトができた。 何故 -DMONOLITHIC_BUILD=ON -DBUILD_SHARED_LIBS=OFF が必要なのかはわかっていない。 (共有ライブラリを使用するようビルドすると、実行時に printer-client.so が無い旨のエラーが出る)

WAVE ファイルに変換 (on MacOSX)

radika を使って録音したファイルを編集するために WAVE に変換する

参考: radikoのflvから取り出したAACはなぜiTunesで読めないのか?

16bit, 44.1kHz

afconvert -f WAVE -d LEI16@44100 inputfile.m4a

24bit, 44.1kHz

afconvert -f WAVE -d LEI24@44100 inputfile.m4a

afconvert -f WAVE -d LEI16 inputfile.m4a

では、48kHz のファイルができた。

<続>MySQL 5.6 old_passwords=1 環境へのユーザー情報移行が難しい

結局、前回の記事に書いた手順でユーザー情報を 5.0 サーバーから 5.6 サーバーに移しました。その他のデータベースについては mysqldump でダンプして新サーバーでリストアすることで問題なく移行できました。

ただし、5.6 サーバー側から mysqldump を実行して 5.0 サーバーのダンプを取得しようとすると secure-auth を有効にせよという旨のエラーが出ました。mysql コマンド等では --skip-secure-auth というオプションを付与することで回避できるのですが mysqldump コマンドでは受け付けてくれないようです。今回は Version 5.5 に付属の mysqldump を使用しましたが、5.0 サーバーに長いパスワードハッシュを持つダンプ用のユーザーを作る方法が正攻法であったような気もします。

このことや、短いパスワードハッシュを持つユーザーが登録されている状態で 5.6 サーバーを立ち上げると Windows イベントログに(mysqlが)短い(pre-4.1)のパスワードハッシュについては 'deprecated' であるという警告が出力されるあたりから考えると、普通の、つまり grant 文や set password 文などで短いパスワードハッシュを登録できないのは不具合というよりは仕様(あえてそうやっている)のではないかと考えられます。

というわけで、今回の新サーバーでは mysql.ini において skip-secure-auth オプションは付与したものの old_passwords = 1 はセットしないことにしました。つまり、現在すでに登録されているユーザーについては当面短いパスワードハッシュ(=古いパスワード認証)にするが、今後登録するユーザーについては長いパスワードハッシュ(=新しいパスワード認証)にすることにしました。で、pre-4.1 の認証方法しかとれない古いクライアントについては徐々になくしていっていずれ長いパスワードハッシュに統一しようと思います。

MySQL 5.6 old_passwords=1 環境へのユーザー情報移行が難しい

Windows Server 2003 で稼働させている MySQL 5.0 を Windows Server 2012 / MySQL 5.6 にアップグレードしようとしています。 古い MySQL クライアントライブラリを使用しているプログラムがある関係で、MySQL 5.0 では old_passwords オプションを指定して運用してきました。

MySQL 5.6 でもこの状態(old_passwords)は維持したいと考えています。まずはユーザーおよびその権限データを新サーバーに移してみようとしたところ、なかなかうまく行きませんでした。以下いろいろ試してみた結果です。

1. mysql データベース dump & restore

5.0 サーバーの mysql データベースを mysqldump コマンドで dump して、5.6 サーバーにインポートしてみました。この方法だと、mysql データベースの各テーブルの構造が違うためか MySQL サービスが起動しなくなってしまうようで、あきらめました。

2. show grants

5.0 サーバーで

show grants for 'ユーザー名'

として、表示された SQL 文を 5.6 サーバーで実行してみました。表示された(=実行した) SQL 文は例えば

GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY PASSWORD '5d2e19393cc5ef67';

ですが、

ERROR 1827 (HY000): The password hash doesn't have the expected format. Check if
  the correct password algorithm is being used with the PASSWORD() function.

というエラーが出て実行できませんでした。 試しに、

GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password';

と、生のパスワードを指定してみましたが、同じエラーが出て実行できませんでした。old_passwords = 1 の環境ではパスワード付きのユーザーを作成できないということなんですかね??

3. mysql.user テーブル直接書き換え

仕方がないので、まずはパスワード無しのユーザーを作成し、その後 show grants の結果から 'IDENTIFIED BY..." 以降を削除した SQL 文を実行します。

create user 'user'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%';

さらに、mysql.user テーブルの password フィールドに直接パスワードをセットします。

update mysql.user set password='5d2e19393cc5ef67' where user='user' and host='%';
flush privileges;

これで、Version 5.6 の MySQL クライアント(mysql.exe)で接続してみます。

>mysql -u user -ppassword

以下のエラーが出て接続できませんでした。

ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password:
YES)

さらに、mysql.user テーブルの plugin フィールドを空にしてみます。デフォルトではここに 'mysql_native_password' がセットされています。空をセットすることでパスワードハッシュの値に応じて 'mysql_native_password' か 'mysql_old_password' プラグインのいずれかを呼び出してくれるようです。MySQL 5.6 マニュアル

update mysql.user set plugin='' where user='user' and host='%';
flush privileges;

もう一度 mysql.exe で接続してみます。

>mysql -u user -ppassword

またエラーですが、今度はエラーメッセージが変わりました。

ERROR 2049 (HY000): Connection using old (pre-4.1.1) authentication protocol ref
used (client option 'secure_auth' enabled)

どうやら、5.6 付属の mysql.exe ではデフォルトで secure_auth オプションが有効になっているようです。明示的に無効にしてみます。

>mysql -u user -ppassword --skip-secure-auth

やっと接続出来ました。

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.6.15-log MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

という訳で何とかなりましたが、何かもっと簡単な方法があるような気もします...。