MacPortsでswftools@0.9.2を入れようとしたら失敗した

$ port search swftoolsswftools @0.9.2 (graphics)
    SWF manipulation and generation tools
$ sudo port install swftools
[snip]
--->  Building swftools
Error: org.macports.build for port swftools returned: command execution failed
Please see the log file for port swftools for details:
    /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_graphics_swftools/swftools/main.log
To report a bug, follow the instructions in the guide:
    http://guide.macports.org/#project.tickets
Error: Processing of port swftools failed

swftoolsを使いたくて、MacPortsにあったから入れようとしてみたら、エラーで失敗しました。

現状

たぶん、依存してるライブラリ、giflibのバージョンの問題っぽい。後述するメーリングリストのログを、流し読みしたところ*1swftools側で近いうちに、新しいgiflibに対応するということになってるっぽいです。

情報源

Changed 4 weeks ago by ryandesign@…

Replying to simon.groenewolt@…:

I've joined the swftools mailinglist and posted a message regarding this error.

Here are the messages in that thread:

#34553 (swftools: Undefined symbols _PrintGifError) – MacPorts

エラーメッセージで示されたMacPortsのログを見て、そこにあるキーワードを元に探してみると、MacPortsTracに該当するチケットがありました。

> This is not a Mac-specific issue; it affects any user who has
> upgraded to giflib 4.2.0, which is the latest stable version of
> giflib is that has been released by its developers:
>
> http://sourceforge.net/projects/giflib/

I was aware of the above, yes. My suggestion of a downgrade to
4.1.6 was meant as a temporary solution, not a permanent fox.

http://lists.nongnu.org/archive/html/swftools-common/2012-05/msg00056.html

MacPortのチケットにswftoolsメーリングリストのURLが4つ貼ってあります。4個目のURLを見ると、giflib最新の4.2.0だと発生するという報告に対し、とりあえずの対応として4.1.6を使う解決策が出てました。

> The developers of swftools should update swftools to be compatible
> with the latest stable version of giflib by no longer attempting to
> use this function.

Now the issue has been flagged, I agree. I am sure the issue will be
rectified shortly.

http://lists.nongnu.org/archive/html/swftools-common/2012-05/msg00056.html

同じメール内には、それなりに色々と書いてあるけど、とりあえず、最後のほうにswftools側で対応する的な事が書かれてました。このメールが2012/05/31の事だけど、今回エラーが出たって事は、まだMacPortsリポジトリには少なくとも反映されてないみたい。

疑問

回避策として提示されている、giflib 4.1.6を使うという事だけど、この辺の知識が足りなくてやり方がわからない。

LinuxだとldconfigとかLD_LIBRARY_PATHとかを、どうにかするんだと思うんだけど、Macにはldconfig/etc/ld.so.confが無く、どうやら別の仕組みになっているみたい((そもそも一時的な対応なのに、/etc/ld.so.confを変えるのは良くないんだろうけど))。

Mac OS Xの標準のバイナリファイルフォーマット(Mach-O)は、Linuxでのバイナリファイルフォーマット(ELF)とは異なっており、共有ライブラリの扱い方も異なっていたと記憶しているので、Mac OS Xにはldconfigは存在しなかった(=必要ない)と思います。

Macでldコマンド、ldconfigコマンドは使用できますか 【OKWAVE】

MacLinuxの違いは、こういうことらしい。

この辺りいい加減ちゃんと理解しないといけないよなぁ。

MacPortsで入れる代わりに自前でビルドしたライブラリを使ってswftoolsをビルドしてみた - kanonjiの日記

ライブラリ検索パスに入っていない場所に置いてあるライブラリを使って、セルフビルドしてみました。

環境

Mac Mac OS X 10.5.8(Leopard
giflib 4.2.0
swftools 0.9.2(入れようとしたもの)

*1:読み間違ってなければ

Windows7でもiptablesのFORWARDみたいな事がしたくってやってみたら出来なくなってた

Windows7内のXPモードであるWindowsXPで、TCPでポートを待ち受けるサーバー的なものを動かしたくて、どうにかしてポートフォワード*1をしようとしてます。sshポートフォワードとか色々方法を考えているとき、Linuxならiptablesフォワードがあったよなぁと思い出し、Windowsでも何かないかと調べてみたら、見つけました。
そして、Windows7だと出来ないことがわかったので、残念だけどそこまでをメモしておきます。


Windows7のXPモードにサーバーを立てて別PCからアクセスする - kanonjiの日記
ちなみにやりたかったのはこれです。結局iptables的なFORWARDは無理だったけど、学習も兼ねて、sshポートフォワード、stone、ルーティングテーブル書き換えの3つの方法でやってみました。

出来るはずだった方法

Remote Accsess and Routingサービス*2というものがあり、これを有効にするとWindowsでもiptablesっぽい事が出来るようになる。

Remote Accsess and Routingサービスを起動
>ipconfig /all

Windows IP 構成

   ホスト名 . . . . . . . . . . . . : mypc
   プライマリ DNS サフィックス . . . . . . . :
   ノード タイプ . . . . . . . . . . . . : ハイブリッド
   IP ルーティング有効 . . . . . . . . : はい
   WINS プロキシ有効 . . . . . . . . : いいえ

イーサネット アダプター ローカル エリア接続:
[snip]

Remote Accsess and Routingサービスが起動すると、このIP ルーティング有効はいになります。

もしくはレジストリで有効化

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters の IPEnableRouter のdwordを1にすればルーティング自体は許可になります。 その後適当にルートを追加。

https://twitter.com/pankazuda/status/228117970163990528

Twitterで教えてもらった話ではレジストリを変更しても、IP ルーティング有効はいになるとの事。結局ポートフォワードが出来なかったので、Remote Accsess and Routingサービスを使う場合と機能的な違いがあるのかどうか、わかりませんでした。

netshコマンドで設定
>netsh [コンテキスト((Linuxのサブコマンド?))] [サブコンテキスト]...

netshというコマンドで色々と設定できるようです。コンテキストと呼ぶサブコマンド的なものが沢山あります。正直ありすぎてよくわからない。

routing ip nat add/delete portmapping

IP routing commands | Microsoft Docs

検索したところ、ポートフォワードはroutingコンテキストのipサブコンテキストのnat*3addコマンドなどを書くという使い方になるらしい。

add portmapping name="Local Area Connection" tcp 0.0.0.0 80 10.0.0.1 80

http://technet.microsoft.com/ja-jp/library/cc754535(v=WS.10).aspx#BKMK_96

サブコンテキストまでが省略されてるけど、こんな使い方になるっぽい。

後述する理由によって、結局出来なかったからこれ以上はわからないけど、このコマンドで設定すれば普通にポートフォワードが出来そうな雰囲気ではあります。

出来ない理由

WindowsXPではRemote Accsess and Routingとnetsh natコマンドを使ってRouter化すればよかったけど、Windows7ではRRASを動かしただけでは、routingできている様子はないし、netshコマンドにNATの項目無いしなんでー?っておもってた。海外のフォーラムを漁ってみるとこんな情報が。

How to enable NAT on Windows 7...
I am not able to use netsh routing commands on WIndows 7. These commands work on Windows XP. Upon research I found that Windows 7 does not support routing commands. On Vista there was workaround by using "netsh add helper ipmontr.dll" and "netsh add helper ippromon.dll" but these commands does not work on Windows 7.

http://d.hatena.ne.jp/mad-capone/20110628/1309259276

なんとWindowsXPでは出来たことがWindows7で出来なくなってるんだとか。引用元ではnetsh natと書いてるが、こっちの環境でもnetsh routingが無いことを確認しました。routingコンテキストが無くちゃ、ポートフォワードは設定できません。

マイクロソフトめ・・・

余談

>netsh ?

使用法: netsh [-a エイリアス ファイル名] [-c コンテキスト] [-r リモート コンピュ
ーター名] [-u [ドメイン名\]ユーザー名] [-p パスワード | *]
              [コマンド | -f スクリプト ファイル名]

使用できるコマンドは次のとおりです:

このコンテキストのコマンド:
?              - コマンドの一覧を表示します。
add            - エントリの一覧に構成エントリを追加します。
advfirewall    - 'netsh advfirewall' コンテキストに変更します。
branchcache    - 'netsh branchcache' コンテキストに変更します。
bridge         - 'netsh bridge' コンテキストに変更します。
delete         - エントリの一覧から構成エントリを削除します。
dhcpclient     - 'netsh dhcpclient' コンテキストに変更します。
dnsclient      - 'netsh dnsclient' コンテキストに変更します。
dump           - 構成スクリプトを表示します。
exec           - スクリプト ファイルを実行します。
firewall       - 'netsh firewall' コンテキストに変更します。
help           - コマンドの一覧を表示します。
http           - 'netsh http' コンテキストに変更します。
interface      - 'netsh interface' コンテキストに変更します。
ipsec          - 'netsh ipsec' コンテキストに変更します。
lan            - 'netsh lan' コンテキストに変更します。
mbn            - 'netsh mbn' コンテキストに変更します。
namespace      - 'netsh namespace' コンテキストに変更します。
nap            - 'netsh nap' コンテキストに変更します。
netio          - 'netsh netio' コンテキストに変更します。
p2p            - 'netsh p2p' コンテキストに変更します。
ras            - 'netsh ras' コンテキストに変更します。
rpc            - 'netsh rpc' コンテキストに変更します。
set            - 構成の設定を更新します。
show           - 情報を表示します。
trace          - 'netsh trace' コンテキストに変更します。
wcn            - 'netsh wcn' コンテキストに変更します。
wfp            - 'netsh wfp' コンテキストに変更します。
winhttp        - 'netsh winhttp' コンテキストに変更します。
winsock        - 'netsh winsock' コンテキストに変更します。
wlan           - 'netsh wlan' コンテキストに変更します。

利用できるサブコンテキストは次のとおりです:
 advfirewall branchcache bridge dhcpclient dnsclient firewall http interface ips
ec lan mbn namespace nap netio p2p ras rpc trace wcn wfp winhttp winsock wlan

コマンドのヘルプを表示するには、コマンドの後にスペースを入れ、
 ? と入力してください。

netshのコンテキストの一覧です。各コンテキストの説明が意味をなしてないのも苛立ちを覚える*4んですが、firewalladvfirewallの似たコンテキスト、どうやら以前はfirewallコンテキストで設定した事がadvfirewallに移動してたりするらしいです。そういう変更を気軽に放り込んでくるのも、マイクロソフトのいやなところのひとつ。netshの情報源はあまり多くないので、ネットの情報が使えなくなってしまうよ・・・

routingコンテキストが別名になってたり、別のコンテキストで出来そうなのないかなと思ったけど、説明が書いてないのでよくわからない。

環境

OS Windows7 Professional 64bit

*1:XPモードはVirtual PCで動く普通の仮想マシンだけど、Virtual BoxやVMwareと違い、ホスト-ゲスト間をNATで繋ぐ事は出来ても、なんとポートフォワードの設定が出来ない中途半端な仮想化環境でした

*2:サービスの設定画面での説明は「企業ユーザーのために、ローカル エリア ネットワークとワイド エリア ネットワーク環境でのルーティング サービスを提供します。」

*3:サブサブコンテキスト、でいいのか?

*4:横幅固定のcmd.exeとかにもね

WordpressのレンタルブログサービスWordpress.comが全然Wordpressじゃない件

ちょっと思いつきでブログを作りたくて、前から気になってたWordPress.com: 無料のサイトやブログを作成を使ってみた。Wordpressの開発会社が運営する、Wordpressを使ったブログサービスで、Wordpressならカスタマイズにもそこそこ慣れてるし、今回は自分で構築するほどじゃないと思ったので使ってみたら、予想外に全然Wordpressじゃなかったのです。

以下、wordpressなんだから色々出来るだろうとずっと思ってた自分が、使ってみて気がついたWordpress.comのダメな所です。気がついた順に書いていきます。

Wordpress.comはまだ登録して3日くらい、実際に触ったのは数時間なので、見落としとか勘違いももしかしたらあるかもしれません。

プラグインのインストールが出来ない

いきなり、メインの要素がなくなりました。Wordpressをインストールしたら必ず入れるプラグインもいくつかあるのに、そもそもインストールが出来ません。当然自分で作ったプラグインも使えません。

テーマの改造が出来ない

プラグインと違ってテーマのインストールは出来ました。ただ、そのテーマをベースにちょっと変えてとかは出来ません。ロゴ画像とか背景画像や色とかテーマが管理画面からの変更に対応している部分*1は変えられるけど、htmlを書いたり変えたりというのは出来ない。

Wordpressのthe_date()やthe_time()で日付を英語で表示出来なくなったのでget_post_time()を使った - kanonjiの日記
Wordpressの記事ループの中で、最初や最後の記事とかを判別する - kanonjiの日記

当然テンプレートタグも書けなければ、function.phpにちょっとした関数を書いて使うことも出来ないので、こんなのを使う余地がない。

もしかして

テーマのインストールが出来るなら、予めfunction.phpに色々機能を書きまくったテーマを作って、テーマディレクトリに登録すれば自分のコードを使う事ができるかも?でも、登録するって事は他の人も使えちゃうって事だろうし、プラグインがダメって事は、プログラム上の制限は当然ありそうだけど。

パーマリンク設定が変更できない

パーマリンク/2012/01/01/Slug/に固定されているようです。インストールする方のWordpresで言う所の日付と投稿名/%year%/%monthnum%/%day%/%postname%/です。
流石にこれはあるだろうと思っていて、メニューに項目が沢山あるので見逃してるのかなと思い/wp-admin/options-permalink.phpに直接アクセスしてみたらSorry, this is disabledと言われてしまいました。

Google Analyticsが使えない

小規模サイトなら多くのサイトで導入してると思うAnalyticsも使えません。どっかの掲示板で見かけたほんとかどうか分からない話によると、Wordpress.com全体で使ってるから個別には無理なんだとか。理由は兎も角、使えない事にはかわりありません。そもそも、テーマの改造が出来ないので、自分の使いたいJavaScriptすら置けないという。
一応WordPress.com Stats | WordPress.orgというアクセス解析機能が提供されています。

ブログパーツや自作JavaScriptが使えない

書いてる途中に気がついて、既に書いてるけど、よく考えたらブログパーツや自作JavaScriptすら使えない。
どんだけガチガチなんだろう。

Tumblrの方がまだ自由度ある

多分Wordpress.comって結構前から運営されてるんだろうし、もしかしたらGoogle Analytics登場以前からかもしれない。だから、そういう新しいものについていけてないのかもしれない。Wordpressが持つ自由度の高いというイメージとは別に、やっぱり長くあるサービスだと、色々古くさくなるものなのかもしれない。
Tumblrはすごいシンプルだけど、少なくともテンプレートはhtml/cssレベルで改造できるし、たしかGoogle Analyticsも使えたはず。シンプルとはいえ新しめのサービスは対応してほしいところは対応してるって事なのかな。JavaScriptまで書けるかは分からないけど。

Wordpress.org > Tumblr  |超えられない壁|  Wordpress.com

柔軟性・自由度に関してはWordpress.comはかなり低いです。はてなダイアリーも出来ない事かなり多いけど、Wordpress.comも相当・・・。気軽にブログ作りたいなって思ったらTumblrがいいかな。Wordpress.comで作っちゃったのは、近いうちにTumblrで作り直してみたい。

*1:テーマが管理画面からの変更を想定して作られていれば、なのでテーマごとに変えられる部分は違うと思うし出来ないテーマもあると思う

/etc/init.d/mysql statusを一般ユーザーで使ったらおかしな挙動をした件

$ /etc/init.d/mysqld status
mysqld は停止していますがサブシテムがロックされています

確かstatusは一般ユーザーでも見れたよなぁと思ってやったら、なんかこんなエラーメッセージが出ました。全然記憶になかったんで、止まってるのかなと思って再起動とかしてから、もう一度status見てもやっぱり出ちゃう。ふとroot権限でstatus見たらちゃんと確認出来ました。
root権限じゃないとダメだったっけかなぁ?

2011-11-22

MySQLの拡張仕様、GROUP BYでカラム指定を省略してSELECTする場合について

GROUP BY節で、選択したすべてのカラムの名前を列挙する必要はありません。これにより、ごく一部ではありますが、きわめて一般的なクエリのパフォーマンスが向上します。項11.11. 「GROUP BY 句との関数および修飾子の使用」 を参照してください。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 1.7.1 標準 SQL に対する MySQL 拡張機能
SELECT foo_id, bar_id FROM examples GROUP BY foo_id;

MySQLでは、例えばこんな風に、GROUP BYにfoo_idだけを指定して、foo_id, bar_idを取得出来ます。上記の通り、実はこれはMySQLの拡張仕様らしいです。

SELECT foo_id, bar_id FROM examples GROUP BY foo_id, bar_id;

標準SQL規格では、この様にfoo_id, bar_idを取得したい場合は、GROUP BY foo_id, bar_idとする必要があります。

注意

GROUP BY 部から省略したカラムがグループ内で一定していない場合は、この機能を 使用しないで ください。サーバはいかなる値もグループから自由に戻すことができ、すべての値が同じでない限り、結果は不確定です。

http://dev.mysql.com/doc/refman/5.1/ja/group-by-hidden-fields.html

機械翻訳っぽくて分かりにくいですが、前述の例でGROUP BY foo_idでグルーピングした際、bar_idに何が入るか分からないという、落とし穴があるみたいです。これを知らなかったんですが、GROUP BYをあまり使った事が無く不安だったので聞いてみたら、教えてもらえました。

foo_id bar_id
1 1
1 2
1 3
2 1
2 1
2 1

分かりにくいし、後で忘れるかもしれないので、例を書いておきます。
こんなテーブルから、GROUP BYを使ってSELECTした場合の、SQL標準とMySQL拡張仕様の2パターンの想定動作*1を書いてみます。

SQL標準
SELECT foo_id, bar_id, count(foo_id) AS count FROM examples GROUP BY foo_id, bar_id;
foo_id bar_id count
1 1 1
1 2 1
1 3 1
2 1 3

SQL標準どおりちゃんと書けば、GROUP BYに指定するカラムはそもそも省略出来ません。foo_idbar_idの両方が同じ値のレコードをグループにするので、この様になります。

MySQL拡張仕様
SELECT foo_id, bar_id, count(foo_id) AS count FROM examples GROUP BY foo_id;
foo_id bar_id count
1 ? 3
2 1 3

MySQL拡張仕様で、GROUP BYへのカラムを省略してGROUP BY foo_idとすると、foo_idだけ同じ値なら、グルーピングします。この場合、?になっているbar_idには、1, 2, 3の3通りの可能性があります。そして、MySQLの拡張仕様では、実行毎にどれかを入れるし、どれが入るかは分からないという話です。

例2

tech-memo » MySQLのGROUP BYは、寛容すぎて気持ちが悪い。

例を書いておいてなんですが、こっちのエントリーのほうが例がわかりやすいかもしれません。

書いた時期

2011-10-06

*1:実行してません。

CentOSの予約済みUID/GIDを確認する

ホワイトペーパー/アーキテクチャー/ユーザーとグループ/GIDとUID - Nature's Linux Tech PortalはNature's Linuxというディストリビュージョンのドキュメントみたいだけど、システムが使うUID/GIDをちゃんとまとめてあるのは良いなと思って、CentOSでも探してみました。

・/usr/share/doc/setup-2.5.58/uidgidの情報です
・実際のインストールと異るなる部分があります
・/etc/passwdを見て確認してください

CentOS-uidgid情報

色々探して/usr/share/doc/setup-2.5.58/uidgidに書いてあるらしいという事がわかったのでメモしておきます。上のページによると、実際とは異なる部分があるらしいし、Nature's Linuxのより分かりやすくないけど、無いよりあるほうがいいよね。
web上にも書いてあるといいのにな。見つけれて無いだけであるのかもしれないけど。

出力してみた

$ cat /usr/share/doc/setup-2.5.58/uidgid 
NAME		UID	GID	HOME			SHELL		PACKAGES
root		0	0	/root			/bin/bash	setup
bin		1	1	/bin			/sbin/nologin	setup
daemon		2	2	/sbin			/sbin/nologin	setup
sys		-	3	-			-		setup
adm		3	4	/var/adm		/bin/bash	setup
tty		-	5	-			-		setup
disk		-	6	-			-		setup
lp		4	7	/var/spool/lpd		/sbin/nologin	setup
mem		-	8	-			-		setup
kmem		-	9	-			-		setup
wheel		-	10	-			-		setup
sync		5	(0)	/sbin			/bin/sync	setup
shutdown	6	(0)	/sbin			/sbin/shutdown	setup
halt		7	(0)	/sbin			/sbin/halt	setup
mail		8	12	/var/spool/mail		/sbin/nologin	setup
news		9	13	/var/spool/news		/sbin/nologin	setup
uucp		10	14	/var/spool/uucp		/sbin/nologin	setup
operator	11	(0)	/root			/sbin/nologin	setup
games		12	(100)	/usr/games		/sbin/nologin	setup
gopher		13	30	/usr/lib/gopher-data	/sbin/nologin	setup
ftp		14	50	/var/ftp		/sbin/nologin	setup
man		-	15	-			-		setup
oprofile	16	16	/home/oprofile		/sbin/nologin	oprofile
pkiuser	17	17	/usr/share/pki		/sbin/nologin	pki-ca,rhpki-ca
floppy		-	19	-			-		dev,MAKEDEV
games		-	20	-			-		setup
slocate		-	21	-			-		slocate
utmp		-	22	-			-		initscripts,libutempter
squid		23	23	/var/spool/squid	/dev/null	squid
pvm		24	24	/usr/share/pvm3		/bin/bash	pvm
named		25	25	/var/named		/bin/false	bind
postgres	26	26	/var/lib/pgsql		/bin/bash	postgresql-server
mysql		27	27	/var/lib/mysql		/bin/bash	mysql
nscd		28	28	/			/bin/false	nscd
rpcuser		29	29	/var/lib/nfs		/bin/false	nfs-utils
console		-	31	-			-		dev
rpc		32	32	/			/bin/false	portmap
amanda		33	(6)	/var/lib/amanda		/bin/false	amanda
netdump		34	34	/var/crash		/bin/bash	netdump-client, netdump-server
utempter	-	35	-			-		libutempter
vdsm	36	-	/		/bin/bash	kvm, vdsm
kvm	-	36	-		-	kvm, vdsm
rpm		37	37	/var/lib/rpm		/bin/bash	rpm
ntp		38	38	/etc/ntp		/sbin/nologin	ntp
dip		-	40      -			-		setup
mailman		41	41	/var/mailman		/bin/false	mailman
gdm		42	42	/var/gdm		/bin/bash	gdm
xfs		43	43	/etc/X11/fs		/bin/false	XFree86-xfs
pppusers	-	44	-			-		linuxconf
popusers	-	45	-			-		linuxconf
slipusers	-	46	-			-		linuxconf
mailnull	47	47	/var/spool/mqueue	/dev/null	sendmail
apache		48	48	/var/www		/bin/false	apache
wnn		49	49	/home/wnn		/bin/bash	FreeWnn
smmsp		51	51	/var/spool/mqueue	/dev/null	sendmail
puppet	52	52	/var/lib/puppet		/sbin/nologin	puppet
tomcat	        53	53	/var/lib/tomcat		/sbin/nologin	tomcat
lock		-	54	-			-		lockdev
ldap		55	55	/var/lib/ldap		/bin/false	openldap-servers
frontpage	56	56	/var/www		/bin/false	mod_frontpage
nut		57	57	/var/lib/ups		/bin/false	nut
beagleindex	58	58	/var/cache/beagle	/bin/false	beagle
tss	59	59	-		/sbin/nologin	trousers
piranha		60	60	/etc/sysconfig/ha	/dev/null	piranha
audio		-	63	-			-
condor		64	64	/var/lib/condor		/sbin/nologin	condord
pegasus		66	65	/var/lib/Pegasus	/sbin/nologin	tog-pegasus
wine		-	66	-			-		wine
webalizer	67	67	/var/www/html/usage	/sbin/nologin	webalizer
haldaemon	68	68	/			/sbin/nologin	hal
vcsa		69	69	-			/sbin/nologin	dev,MAKEDEV
avahi		70	70	/			/sbin/nologin	avahi
realtime	-	71	-			-
privoxy		73	73	/etc/privoxy		/bin/bash	privoxy
sshd		74	74	/var/empty/sshd		/sbin/nologin	openssh-server
radvd		75	75	/			/bin/false	radvd
cyrus		76	(12)	/var/imap		/bin/bash	cyrus-imapd
shadow		-	76	-			-		cyrus-imapd
pcap		77	77	/var/arpwatch		/sbin/nologin	arpwatch
fax		78	78	/var/spool/fax		/sbin/nologin	mgetty
nocpulse	79	79	/etc/sysconfig/nocpulse	/bin/bash	nocpulse
desktop		80	80	-			/sbin/nologin	desktop-file-utils
dbus		81	81	/			/sbin/nologin	dbus
jonas		82	82	/var/lib/jonas		/sbin/nologin	jonas
clamav		83	83	/tmp			/sbin/nologin	clamav
screen		-	84	-			-		screen
quaggavt	-	85	-			-		quagga
sabayon 	86	86	-			/sbin/nologin	sabayon
postfix		89	89	/var/spool/postfix	/bin/true	postfix
postdrop	-	90	-			-		postfix
majordomo	91	91	/usr/lib/majordomo	/bin/bash	majordomo
quagga		92	92	/			/sbin/nologin	quagga
exim		93	93	/var/spool/exim		/sbin/nologin	exim
distcache	94	94	/			/sbin/nologin	distcache
radiusd		95	95	/			/bin/false	freeradius
hsqldb		96	96	/var/lib/hsqldb		/sbin/nologin   hsqldb
dovecot		97	97	/usr/libexec/dovecot	/sbin/nologin	dovecot
ident		98	98	/			/sbin/nologin	ident
nobody		99	99	/			/sbin/nologin	setup
users		-	100	-			-		setup
gnats		?	?	?			?		gnats, gnats-db
listar		?	?	?			?		listar
nfsnobody	65534	65534	/var/lib/nfs		/sbin/nologin	nfs-utils

# Note: nfsnobdy is 4294967294 on 64-bit platforms (-2)

環境

CentOS CentOS release 5.6

書き始めた時期

2011-05-16
/usr/share/doc/setup-2.5.58/uidgidにあるって事とリンクだけ、メモしてあった。

MySQLでidだけをSELECTして、カンマ区切りにして出力する

SELECT GROUP_CONCAT(id SEPARATOR ', ') FROM examples;
+-------------------------------------------------------------------------------------+
| GROUP_CONCAT( id SEPARATOR ', ')                                                    |
+-------------------------------------------------------------------------------------+
| 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146 | 
+-------------------------------------------------------------------------------------+

ちょっとデバッグ目的で、mysqlコンソールで直接SQL書いて、どんなデータが取れるか確認したかった。ただ、perlでは1回SELECTして、その結果をwhileで回して、それを元にSELECTをしてって感じなので、それをやるにはWHERE IN()を使う事になります。それで、WHERE IN()に渡す為の、カンマ区切りのidが欲しかったので、調べてやってみました。これならWHERE IN()のとこにコピペできます。

サブクエリーでやれよって話かもしれないけど、実際に書いてたスクリプトはJOINとかしてて複雑なSQLだったので。MySQLは、JOINありのサブクエリーって苦手なのか、かなり遅いのでクエリーを分けたかったので。

書いた時期

2011-09-29