カテゴリー別アーカイブ: UNIX

mkvをmp4に変換するバッチスクリプト

mkv2mp4_flac1

よく使う割には手順が多くて面倒なのでバッチを作った。

h.264 + FLACなmkvファイルをmp4に変換する。
中身のFLACファイルはmp4には入らないので、AACに変換。
可変フレームレート対応。

使い方など
mkv2mp4_flac1 -v 0 -a 1 file.mkv [file2.mkv] [file3.mkv] …
事前に、ファイルのトラック番号をffmpegなどで調べる。
-v < ビデオトラックID> -a < オーディオトラックID>
ファイルは指定しただけ処理される。

続きを読む mkvをmp4に変換するバッチスクリプト

MacのAndroid Developer Toolsで実機デバッグをやってみた

MacのAndroid Developer Tools(adt)のEclipseで実機デバッグをやってみた。

やり方をググってみたんだけれど、なかなかうまく認識できなかったのでやり方をメモ。

使用している実機はKaihouというメーカーのkh-mid-700という中華パッド。通常だったらベンダから提供されるUSBドライバを使うんだけれど、マイナー機種だったのでググってみると汎用USBドライバを使えとのこと。

流れとしては

  1. 実機を接続
  2. 実機のベンダIDを調べて
  3. manifest.iniにベンダIDを記載
  4. android adb update を実行して ~/.android/adb_usb.ini にベンダIDを追記
  5. (上記の手順では ~/.android/adb_usb.ini にベンダIDが追記されないことがあるが、その際には手動で追記)
  6. adbサーバを再起動
  7. adb devicesで確認

という流れになる。

結構色々と大変なところがあるんだけれど、情報も増えてきているので状況は良くなっているかも。

2の実機のベンダIDの調べ方は何種類かある。一つはターミナルからsystem_profilerを使う方法。もう一つはGUIからUSBの情報を調べる方法。

system_profilerは元々macに入っているツールで、USBの一覧などを取得できるらしい。

shell> system_profiler SPUSBDataType
(中略)
KH-MID700:

Product ID: 0x0010
 Vendor ID: 0x2207 (Fuzhou Rockchip Electronics Co., Ltd.)
 Version: 2.22
 Serial Number: YRVVHROS0U
 Speed: Up to 480 Mb/sec
 Manufacturer: rockchip

(後略)

GUIから調べる場合にはFinderのアップルマークから

About This Mac > More Info > System Report

で出てくるウィンドウの
Hardware > USB

に同じ情報が載っているのでそこから Vender IDを取得。

このVendor IDは実機を認識するために何度も使って必ず必要になるのでメモメモ。

ついで実機用のmanifestを作成。このmanifestはadtのsdkディレクトリにあるadd-onに実機名でディレクトリをつくって manifest.ini を作成する。

shell> cd /Applications/adt/sdk/add-ons
shell> mkdir kh-mid700; cd kh-mid700
shell> vi manifest.ini

--- from here ---
name=kh-mid700
vendor=kaihou
description=kaihou mid700
api=10
<span style="line-height: 1.5;">revision=1
</span>usb-vendor=0x2207

--- for here ---

manifest.iniを記載したらこの情報をAndroid Developer Bridge(adb) に教えてあげる。これは android update adb を実行する事でできるんだけれど、うまくいかないことも多々ある。

shell> /Applications/adt/sdk/tools/android update adb

adb has been updated. You must restart adb with the following commands
 adb kill-server
 adb start-server

これを実行するとadbのサーバを再起動するように促される。

このandroid update adbを実行するとホームディレクトリにある‘ ~/.android/adb_usb.ini に追記されるはずなんだけれど、そうじゃないことも多々ある。確認を行って追記されていない場合、コメント文しかない場合には手動でVendor IDを追記してやるといい。

shell> more ~/.android/adb_usb.ini

# ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.
# USE 'android update adb' TO GENERATE.
# 1 USB VENDOR ID PER LINE.

shell> echo "0x2207" >> ~/.android/adb_usb.ini

shell> more ~/.android/adb_usb.ini

# ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.
# USE 'android update adb' TO GENERATE.
# 1 USB VENDOR ID PER LINE.
0x2207
shell> adb kill-server; adb start-server

で、最後に確認する。

shell> adb devices
List of devices attached
YRVVHROS0U device

 

いろいろとやり方が書いてあってわかりにくいのだけれど、ここまでたどり着ければオッケーみたい。

 

 

 

参考サイト

MacでAndroid端末が認識されない

Macにgalaxy S2をつなげたのに認識してくれなかった

 

UNIX/Linux環境でFTPを再帰的に拾ってくる方法

こんにちは、岡田洋一です。

UNIX/Linux環境でFTPのディレクトリをまるごと取りたかったんです。が、ftpコマンドだとディレクトリを取ろうとしてもダメなんですね。

get somedirectoryってやるとNot a regular fileって怒られます。

shell> ftp ftp.example.com
Connected to ftp.example.com.
220 ::ffff:192.0.2.1 FTP server ready
Name (ftp.example.com:user): user
331 Password required for user
Password:
230 User user logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> get tmp
local: tmp remote: tmp
550 tmp: Not a regular file

ディレクトリを再帰的に取りたい、っていう場合にはwgetを使うと良いようです。

shell> wget -r ftp://user:[email protected]//path_to_get/

多くの環境でインストールされているwgetで、ワンライナーで取得できるのはいいですね。

参考:  How do you recursively ftp a folder in linux

Debian7.3でsudoができないエラー

所用でDebian7.3を入れることになった。

いつも通り手順に従ってサックリインストールをしたんだけれど、sudoができない。
sudoができないと話にならない。

エラーの内容は以下の通り。

$ sudo ls
[sudo] password for yousan:
sudo: PERM_ROOT: setresuid(0, -1, -1): Operation not permitted
sudo: unable to open /var/lib/sudo/yousan/1: Operation not permitted
sudo: ls: command not found

うーん、setresuidっていうのでエラーが出てる。setresuidってユーザのUIDを切り替えるときに使う関数で、sudoなんかはモロに使ってるんだけど、こいつがエラーを出している模様。
ググってみると同様のエラーが報告されてた。

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=658896

2012年の3月にすでに確認されていたらしい。
内容では
libnss-ldapの代わりにlibnss-ldapdを使え
nscdの代わりにnslcdを使え
とのこと。今回問題が起きた環境はldapでの認証を使っていたのでこの対処をしてみることに。

shell> aptitude purge libnss-ldap nscd
shell> aptitude install libnss-ldapd nslcd

サックリいれかえたらうまくsudoが使えるようになりました。
今後はこれらの二つを使っていこうと思います。

Subversionのサーバをsvnからhttpに切り替えた時に作業ディレクトリで起こったエラー

0. サブバージョンを置き換えたらエラー発生

Subversionのサーバをsvnからhttpに切り替えたんだけど、作業ディレクトリ側でエラーが発生した。
当初Subversionはsvnservによって、svnプロトコルでやりとりを行っていた。svn coとかするときにsvn://で始まるURLを使っていた、ということですね。

<br />shell&gt; svn co svn://svn.example.com/hogerepo/<br />

LAN内で利用する分には不満がなかったんだけど、外部のインターネット越しに利用するとなると色々と不便があったのでHTTPで外部からも取得できるように変更した。
svnプロトコル自体を公開すれば良いじゃないか、という意見もあるかもしれないけれど、色々と考えた結果apache経由のhttpのみを公開することに。その辺の移行も大変だったけれど、それはまた別の機会に。

今回svn -> httpにする事で、今までチェックアウトしてきた作業ディレクトリで、svnの操作が行えなくなってしまった。もちろんプロトコルを変えたので当然と言えば当然。今回はこの動かなくなってしまった作業ディレクトリのリポジトリ参照先を変更することに。

1. 発生するエラー

まず現状のエラーを確認。

<br />shell&gt; svn update<br /> Updating '.':<br /> svn: E000061: Unable to connect to a repository at URL '<span style="text-decoration: underline;">svn://svn.example.com/hogerepo</span>'<br /> svn: E000061: Can't connect to host '<span style="text-decoration: underline;">svn.example.com</span>': Connection refused<br />

svn.example.comへ接続できない、と怒られていますね。もちろんこれはsvnservの廃止、httpの移行を行ったのでsvn.example.comへsvnプロトコルではアクセスできない、ということですね。

2. svnの参照リポジトリの変更

svnコマンドには参照リポジトリの変更というものがある。今回はそれを利用する。まず前段階として現在どういったリポジトリを参照しているか、を確認する。

<br />shell&gt; svn info | grep URL<br />URL: <span style="text-decoration: underline;">svn://svn.example.com/hogerepo</span><br />

svn infoで出力される情報の内、URLの項目を調べておく。今回の件ではsvn://svn.example.com/hogerepo が該当する。
今回の svn -> http の移行はプロトコルの変更のみで、svnサーバの名前は従来と同様に svn.example.com で行くこととなった。
(実際にはsvn_test.example.comのように移行時には別のサーバを立て、移行作業が完了した後にsvn.example.comの指すホストを書き換えている)
今回の移行はサーバのリポジトリの配下にあるリポジトリ構造、ディレクトリ構造もそのまま引き継いだので、

svn://svn.example.com/hogerepo
というリポジトリが
http://svn.example.com/hogerepo
になるだけとなった。

ちなみにリポジトリの配下のディレクトリ(ここではhogerepoリポジトリにあるディレクトリ)以下を変更する場合も同様。
さてこのURLを使って、以下のようにsvn switchを発行してやる。

<br /></span><span style="line-height: 1.714285714; font-size: 1rem;">shell&gt; svn switch --relocate </span><span style="text-decoration: underline;">svn://svn.</span><span style="text-decoration: underline;">example.com/hogerepo </span><span style="text-decoration: underline;">http://svn.example.com/hogerepo<br />

これで完了。簡単ですね。

ちなみに今回はサーバの移行をディレクトリを丸ごとコピーしたんだけれど、場合によってはリポジトリをダンプして読ませて、といった他のケースも有り得る。そうなってくるとこの作業ディレクトリの指すリポジトリ変更にはちょっと問題があったりする。具体的にはUUIDと呼ばれるリポジトリを一意に識別するものがあるのですが、これが一致しないとsvn switchの段階で怒られてしまいます。

この件に関しては下記に解決方法の一例があるので参照を。

svn switch –relocate: wrong uuid?

CSSやHTMLで指定される色の名前から16進数表記を取得する

CSSやHTMLで指定される色の名前から16進数表記を取得したくなった。

例えば

<p style=”color: green;”>
の用に書かれているgreenはRGBの16進表記では008000で、次の

<p style=”color: #008000;”>

と同じ意味だ。このとき、greenという色の名前から008000が欲しくなった。一覧はググルとでてきた。

CSS Color Names

http://www.w3schools.com/cssref/css_colornames.asp

そんでこれを変換するPHPでコードを書いてみた。

<?php

main();

function main() {
 global $palettes;
 var_dump(getColorHexByName('green'));
}

function getColorHexByName($colorName) {
 $palettes = array(
 array('name' => 'AliceBlue', 'hex' => 'F0F8FF'),
 array('name' => 'AntiqueWhite', 'hex' => 'FAEBD7'),
 array('name' => 'Aqua', 'hex' => '00FFFF'),
 array('name' => 'Aquamarine', 'hex' => '7FFFD4'),
 array('name' => 'Azure', 'hex' => 'F0FFFF'),
 array('name' => 'Beige', 'hex' => 'F5F5DC'),
 array('name' => 'Bisque', 'hex' => 'FFE4C4'),
 array('name' => 'Black', 'hex' => '000000'),
 array('name' => 'BlanchedAlmond', 'hex' => 'FFEBCD'),
 array('name' => 'Blue', 'hex' => '0000FF'),
 array('name' => 'BlueViolet', 'hex' => '8A2BE2'),
 array('name' => 'Brown', 'hex' => 'A52A2A'),
 array('name' => 'BurlyWood', 'hex' => 'DEB887'),
 array('name' => 'CadetBlue', 'hex' => '5F9EA0'),
 array('name' => 'Chartreuse', 'hex' => '7FFF00'),
 array('name' => 'Chocolate', 'hex' => 'D2691E'),
 array('name' => 'Coral', 'hex' => 'FF7F50'),
 array('name' => 'CornflowerBlue', 'hex' => '6495ED'),
 array('name' => 'Cornsilk', 'hex' => 'FFF8DC'),
 array('name' => 'Crimson', 'hex' => 'DC143C'),
 array('name' => 'Cyan', 'hex' => '00FFFF'),
 array('name' => 'DarkBlue', 'hex' => '00008B'),
 array('name' => 'DarkCyan', 'hex' => '008B8B'),
 array('name' => 'DarkGoldenRod', 'hex' => 'B8860B'),
 array('name' => 'DarkGray', 'hex' => 'A9A9A9'),
 array('name' => 'DarkGreen', 'hex' => '006400'),
 array('name' => 'DarkKhaki', 'hex' => 'BDB76B'),
 array('name' => 'DarkMagenta', 'hex' => '8B008B'),
 array('name' => 'DarkOliveGreen', 'hex' => '556B2F'),
 array('name' => 'DarkOrange', 'hex' => 'FF8C00'),
 array('name' => 'DarkOrchid', 'hex' => '9932CC'),
 array('name' => 'DarkRed', 'hex' => '8B0000'),
 array('name' => 'DarkSalmon', 'hex' => 'E9967A'),
 array('name' => 'DarkSeaGreen', 'hex' => '8FBC8F'),
 array('name' => 'DarkSlateBlue', 'hex' => '483D8B'),
 array('name' => 'DarkSlateGray', 'hex' => '2F4F4F'),
 array('name' => 'DarkTurquoise', 'hex' => '00CED1'),
 array('name' => 'DarkViolet', 'hex' => '9400D3'),
 array('name' => 'DeepPink', 'hex' => 'FF1493'),
 array('name' => 'DeepSkyBlue', 'hex' => '00BFFF'),
 array('name' => 'DimGray', 'hex' => '696969'),
 array('name' => 'DodgerBlue', 'hex' => '1E90FF'),
 array('name' => 'FireBrick', 'hex' => 'B22222'),
 array('name' => 'FloralWhite', 'hex' => 'FFFAF0'),
 array('name' => 'ForestGreen', 'hex' => '228B22'),
 array('name' => 'Fuchsia', 'hex' => 'FF00FF'),
 array('name' => 'Gainsboro', 'hex' => 'DCDCDC'),
 array('name' => 'GhostWhite', 'hex' => 'F8F8FF'),
 array('name' => 'Gold', 'hex' => 'FFD700'),
 array('name' => 'GoldenRod', 'hex' => 'DAA520'),
 array('name' => 'Gray', 'hex' => '808080'),
 array('name' => 'Green', 'hex' => '008000'),
 array('name' => 'GreenYellow', 'hex' => 'ADFF2F'),
 array('name' => 'HoneyDew', 'hex' => 'F0FFF0'),
 array('name' => 'HotPink', 'hex' => 'FF69B4'),
 array('name' => 'IndianRed ', 'hex' => 'CD5C5C'),
 array('name' => 'Indigo ', 'hex' => '4B0082'),
 array('name' => 'Ivory', 'hex' => 'FFFFF0'),
 array('name' => 'Khaki', 'hex' => 'F0E68C'),
 array('name' => 'Lavender', 'hex' => 'E6E6FA'),
 array('name' => 'LavenderBlush', 'hex' => 'FFF0F5'),
 array('name' => 'LawnGreen', 'hex' => '7CFC00'),
 array('name' => 'LemonChiffon', 'hex' => 'FFFACD'),
 array('name' => 'LightBlue', 'hex' => 'ADD8E6'),
 array('name' => 'LightCoral', 'hex' => 'F08080'),
 array('name' => 'LightCyan', 'hex' => 'E0FFFF'),
 array('name' => 'LightGoldenRodYellow', 'hex' => 'FAFAD2'),
 array('name' => 'LightGray', 'hex' => 'D3D3D3'),
 array('name' => 'LightGreen', 'hex' => '90EE90'),
 array('name' => 'LightPink', 'hex' => 'FFB6C1'),
 array('name' => 'LightSalmon', 'hex' => 'FFA07A'),
 array('name' => 'LightSeaGreen', 'hex' => '20B2AA'),
 array('name' => 'LightSkyBlue', 'hex' => '87CEFA'),
 array('name' => 'LightSlateGray', 'hex' => '778899'),
 array('name' => 'LightSteelBlue', 'hex' => 'B0C4DE'),
 array('name' => 'LightYellow', 'hex' => 'FFFFE0'),
 array('name' => 'Lime', 'hex' => '00FF00'),
 array('name' => 'LimeGreen', 'hex' => '32CD32'),
 array('name' => 'Linen', 'hex' => 'FAF0E6'),
 array('name' => 'Magenta', 'hex' => 'FF00FF'),
 array('name' => 'Maroon', 'hex' => '800000'),
 array('name' => 'MediumAquaMarine', 'hex' => '66CDAA'),
 array('name' => 'MediumBlue', 'hex' => '0000CD'),
 array('name' => 'MediumOrchid', 'hex' => 'BA55D3'),
 array('name' => 'MediumPurple', 'hex' => '9370DB'),
 array('name' => 'MediumSeaGreen', 'hex' => '3CB371'),
 array('name' => 'MediumSlateBlue', 'hex' => '7B68EE'),
 array('name' => 'MediumSpringGreen', 'hex' => '00FA9A'),
 array('name' => 'MediumTurquoise', 'hex' => '48D1CC'),
 array('name' => 'MediumVioletRed', 'hex' => 'C71585'),
 array('name' => 'MidnightBlue', 'hex' => '191970'),
 array('name' => 'MintCream', 'hex' => 'F5FFFA'),
 array('name' => 'MistyRose', 'hex' => 'FFE4E1'),
 array('name' => 'Moccasin', 'hex' => 'FFE4B5'),
 array('name' => 'NavajoWhite', 'hex' => 'FFDEAD'),
 array('name' => 'Navy', 'hex' => '000080'),
 array('name' => 'OldLace', 'hex' => 'FDF5E6'),
 array('name' => 'Olive', 'hex' => '808000'),
 array('name' => 'OliveDrab', 'hex' => '6B8E23'),
 array('name' => 'Orange', 'hex' => 'FFA500'),
 array('name' => 'OrangeRed', 'hex' => 'FF4500'),
 array('name' => 'Orchid', 'hex' => 'DA70D6'),
 array('name' => 'PaleGoldenRod', 'hex' => 'EEE8AA'),
 array('name' => 'PaleGreen', 'hex' => '98FB98'),
 array('name' => 'PaleTurquoise', 'hex' => 'AFEEEE'),
 array('name' => 'PaleVioletRed', 'hex' => 'DB7093'),
 array('name' => 'PapayaWhip', 'hex' => 'FFEFD5'),
 array('name' => 'PeachPuff', 'hex' => 'FFDAB9'),
 array('name' => 'Peru', 'hex' => 'CD853F'),
 array('name' => 'Pink', 'hex' => 'FFC0CB'),
 array('name' => 'Plum', 'hex' => 'DDA0DD'),
 array('name' => 'PowderBlue', 'hex' => 'B0E0E6'),
 array('name' => 'Purple', 'hex' => '800080'),
 array('name' => 'Red', 'hex' => 'FF0000'),
 array('name' => 'RosyBrown', 'hex' => 'BC8F8F'),
 array('name' => 'RoyalBlue', 'hex' => '4169E1'),
 array('name' => 'SaddleBrown', 'hex' => '8B4513'),
 array('name' => 'Salmon', 'hex' => 'FA8072'),
 array('name' => 'SandyBrown', 'hex' => 'F4A460'),
 array('name' => 'SeaGreen', 'hex' => '2E8B57'),
 array('name' => 'SeaShell', 'hex' => 'FFF5EE'),
 array('name' => 'Sienna', 'hex' => 'A0522D'),
 array('name' => 'Silver', 'hex' => 'C0C0C0'),
 array('name' => 'SkyBlue', 'hex' => '87CEEB'),
 array('name' => 'SlateBlue', 'hex' => '6A5ACD'),
 array('name' => 'SlateGray', 'hex' => '708090'),
 array('name' => 'Snow', 'hex' => 'FFFAFA'),
 array('name' => 'SpringGreen', 'hex' => '00FF7F'),
 array('name' => 'SteelBlue', 'hex' => '4682B4'),
 array('name' => 'Tan', 'hex' => 'D2B48C'),
 array('name' => 'Teal', 'hex' => '008080'),
 array('name' => 'Thistle', 'hex' => 'D8BFD8'),
 array('name' => 'Tomato', 'hex' => 'FF6347'),
 array('name' => 'Turquoise', 'hex' => '40E0D0'),
 array('name' => 'Violet', 'hex' => 'EE82EE'),
 array('name' => 'Wheat', 'hex' => 'F5DEB3'),
 array('name' => 'White', 'hex' => 'FFFFFF'),
 array('name' => 'WhiteSmoke', 'hex' => 'F5F5F5'),
 array('name' => 'Yellow', 'hex' => 'FFFF00'),
 array('name' => 'YellowGreen', 'hex' => '9ACD32'),
 );

foreach($palettes as $palette) {
   if (strtolower($palette['name']) == strtolower($colorName)) {
   return $palette['hex'];
   }
 }
 return false;
}
?>

これでgetColorHexByName(‘green’) のように色の名前を入れると0800000みたいな16進でとれる!! 便利!きっと便利!

Mac OS Xでmysqlを立てたらTCP/IPで接続できなかった

Mac OS Xでmysqlを立てたらTCP/IPで接続できなかった。

最近はMacで開発環境を構築しています岡田洋一です、こんにちは。
Macは便利で良いですね。いわゆるノマド的な開発も可能でとても良いです。
さてそんなMacなのですがその中に開発環境を構築してやる必要があります。
僕の場合だいたいは apache + mysql + php あたりになります。
さてその中のmysqlが今回は問題を引き起こしてくれました。

TCP/IPで繋がらないんですね。

shell> mysql -h localhost -u root

なんてやってみてもダメですし

shell> netstat -nat | grep 3306

(注) portの待ち受け確認にはいくつかの方法があります。linux系ですと netstat -plnt(?) のようなオプションもありますが、macのdarwinなpsとは互換性がありません。-natオプションはlinux系でも動くのでコチラを利用しています。FreeBSDを利用していた頃はsockstatをよく使っていましたがコチラもOS依存です。

とやってみるとそもそも3306で待ち受けをしていない。netstat -nat というのはtcpで待ち受けをしているポート番号一覧を出してくれて、grepでmysqlの標準待ち受けポートの3306があるかどうかを調べています。

ポート3306でそもそも待ち受けをしていないので、iptableやmysqlのユーザの権限が原因ではなさそうです。

原因として濃厚なのはmy.cnfの記述が真っ先に疑われます。

今回のmysqlはmac portsからインストールしたので、そのmy.cnfは /opt/local/etc/ にあります。

ややこしかったのはこの /opt/local/etc の中にmysql5とmysql51との両方が存在したことでした。

まずはmac portsでインストール済みパッケージの確認

shell> port installed | grep mysql

mysql5 @5.1.68_0
 mysql5 @5.1.70_0 (active)
 mysql51 @5.1.68_0
 mysql51 @5.1.70_0 (active)
 mysql51-server @5.1.68_0
 mysql51-server @5.1.70_0 (active)
 mysql_select @0.1.2_0 (active)
 php5-mysql @5.3.23_0+mysqlnd
 php5-mysql @5.3.26_0+mysqlnd (active)

うーん、結構入っている上にすべてがactiveになっていますね。mac portsにはactive/inactive意外にもload/unloadという状態があります。acitve/inactiveはそもそもそのパッケージが有効か否か、load/unloadはservice startされるかどうか、という感じだそうです。

activeなパッケージの場合、/Library/LaunchDaemons/ に起動スクリプト(実際には起動オプション)がありますので、そちらからパッケージ名を特定しようとしてみます。

shell> ls /Library/LaunchDaemons/*mysql*

/Library/LaunchDaemons/org.macports.mysql51-server.plist

どうやらmysql51-serverのようですね。では実際のmy.cnfは…、というと、通例ですとこのplistファイルに記述されたりするのですがmysql51-serverでは記載がない。バイナリで決めうちなのか、不明ということでした。

プロセスの起動時引数で確認できるかと思い、psで確認しようとしてみました。–conf=/usr/local/etc/my.cnf なんて書いてあるかもしれないですし。

shell> ps auxww | grep mysql
root 3893 0.0 0.0 2465328 1112 ?? Ss 11:20AM 0:00.01 /opt/local/bin/daemondo --label=mysql51-server --start-cmd /opt/local/lib/mysql51/bin/mysqld --user=_mysql ; --pid=exec

が、結局ドコのmy.cnfを利用しているかは分からない!

しょうが無いので実際に書き換えて,ドコが反映されるかを調べてみました。

/opt/local/etc/mysql51/my.cnf のsockでunix ドメインソケットの名前を変更してみました。

shell> grep sock /opt/local/etc/mysql51/my.cnf

socket = /tmp/mysqlnosocketdayo.sock

socketの設定を変更してmysqldを再起動。mac portsで管理されるパッケージの再起動は未だによく分かってないのですが、僕は以下のようにして再起動しています。

shell> sudo sh -c 'port unload mysql51-server; port load mysql51-server;'; ps auxww| grep mysq

再起動できたかどうか、エラーが出た場合なんかにはあまりエラーメッセージを出してくれないので注意が必要です。

で、socketの書き換えはうまく成功していました。ということは利用されているコンフィグは /opt/local/etc/mysql51/my.cnf で間違いがないようです。

さてmy.cnfを確認してみるのですが、特に変な記述はありません。tcp/ipで待ち受けをしていない時にありがちなのは

  • port行が無い
  • bind-address行が無い (無くても待ち受けしてくれます。listen addressを別個で指定したい場合に利用するものですね。127.0.0.1などのループバックアドレスを指定するとローカルホストからしか繋がらないです。注意。)
  • skip-networkが有効になっている

といったところでしょうか。何にせよ netstat -natで待ち受けされていないのですからこの辺りが疑わしいわけです。

が、今回の場合ではどの条件にも合致しそうにない。ホトホト困ってしまいました。IRCで質問したり(moderate権限が無くて発言できない!)、知っていそうな人に質問したり(友達がいなかった!)したのですがダメ。結局数ヶ月をおいてしまう事になりました。

が、一念発起してさらに調べたところ、 /opt/local/etc/mysql51/ にmy.cnf以外のファイルがあることを再認識。

ファイル名はmacports-default.cnf なんていう、macportsでインストールしたらこのファイルをサンプルに津かってね、っぽい名前のファイルがありました。

サンプルコンフィグかな、なんて見過ごしていたんですが中身を確認してみると

shell> more /opt/local/etc/mysql51/macports-default.cnf

# WARNING! ANY CHANGES TO THIS FILE WILL BE LOST ON UNINSTALL/UPGRADES!
# Make your changes to /opt/local/etc/mysql51/my.cnf
# YOU HAVE BEEN WARNED!

# MacPorts default options
[mysqld]
# skip-networking so multple mysql server ports can be loaded
# without each competing for port 3306.
skip-networking

最終行にしっかりと、skip-netwrokingとかいてある…!消して再起動すると

shell> sudo sh -c 'port unload mysql51-server; port load mysql51-server;'

shell>  netstat -nat | grep 3306

tcp4 0 0 *.3306 *.* LISTEN

(注) mysqlの起動終了からポート待ち受けまでの間、立ち上げ処理などでタイムラグがあります。なのでワンライナーでつなげて記述すると待ち受け確認できません。sleepを挟むなどしましょう。

リッスンしてる!!!!

というわけでめでたく繋がるようになりました。めでたしめでたし。

eximで”temporarily rejected RCPT”というエラーに遭遇

メール送信、受信のSMTPサーバ、eximをテストしているときにエラーに遭遇した。

2013-05-08 00:36:05 H=mail.example.net [192.0.2.1] F=<[email protected]> temporarily rejected RCPT <[email protected]>: LDAP search: no results

どうやらメールを一時的に拒否している、というメッセージのようだ。
courier-mtaの時もそうだったが、存在しないアドレスに一定数送信するとエラーになる模様。
courier-mtaの頃にはbanリストの表示とbanリストからの削除コマンドがあったけれど、eximには無いらしい。

代わりにサービスを再起動するとリストはクリアされた。
送信試験などをしているときにこれにハマるとやっかいなのでメモメモ。

> sudo service exim restart