タイトル/名前 | 更新者 | 更新日 |
---|---|---|
日記/2010/08/23/RPM, specファイルの"%makeinstall"マクロのメモ | msakamoto-sf | 2010-08-23 17:26:25 |
技術/VMware/時刻ズレ対策メモ | msakamoto-sf | 2010-08-19 21:32:03 |
技術/Linux/CentOS 5.3 をクライアントとして使う時のntpd | msakamoto-sf | 2010-08-19 21:31:45 |
日記/2010/08/19/TortoiseSVNでsvn+sshをputtyで接続する時の注意点 | msakamoto-sf | 2010-08-19 21:00:08 |
日記/2010/08/19/pageant.exeをスタートアップに登録しようとして嵌ったメモ | msakamoto-sf | 2010-08-19 20:44:57 |
日記/2010/08/18/フリーのER図作成ツール「A5:SQL Mk-2」 | msakamoto-sf | 2010-08-18 23:05:37 |
PHP/Tips/テキスト中のURL自動リンク | msakamoto-sf | 2010-08-13 22:04:57 |
日記/2010/08/09/チーム内の「話し易さ」がポイントなのはどの職場も一緒 | msakamoto-sf | 2010-08-09 23:48:28 |
技術/PostgreSQL/メモ | msakamoto-sf | 2010-08-07 00:10:41 |
技術/PostgreSQL/後付け"serial"設定方法メモ | msakamoto-sf | 2010-08-02 08:37:39 |
久しぶりにRPMパッケージの作成について復習していて、install時には
%install make install PREFIX=$RPM_BUILD_ROOT/usr
か、もしも標準的なconfigureスクリプトによるMakefile生成を使っているなら
%install %makeinstall
使うと良いですよ~、とあったので、試しに"--eval"で覗いてみた。
$ rpmbuild --eval '%makeinstall' /usr/bin/make \ prefix=/usr \ exec_prefix=/usr \ bindir=/usr/bin \ sbindir=/usr/sbin \ sysconfdir=/etc \ datadir=/usr/share \ includedir=/usr/include \ libdir=/usr/lib \ libexecdir=/usr/libexec \ localstatedir=/var \ sharedstatedir=/usr/com \ mandir=/usr/share/man \ infodir=/usr/share/info \ install rpmbuild: ビルドのための spec ファイルが指定されていません。
・・・RPMBUILDが影も形も見えない。で、「あ、マクロだから、元の定義を見ないと駄目か」と気づいてあちこち探し回ると、rpmパッケージで
/usr/lib/rpm/macros
が提供されており、その中で定義されていた。
#------------------------------------------------------------------------------ # The make install analogue of %configure: %makeinstall \ make \\\ prefix=%{?buildroot:%{buildroot}}%{_prefix} \\\ exec_prefix=%{?buildroot:%{buildroot}}%{_exec_prefix} \\\ bindir=%{?buildroot:%{buildroot}}%{_bindir} \\\ sbindir=%{?buildroot:%{buildroot}}%{_sbindir} \\\ sysconfdir=%{?buildroot:%{buildroot}}%{_sysconfdir} \\\ datadir=%{?buildroot:%{buildroot}}%{_datadir} \\\ includedir=%{?buildroot:%{buildroot}}%{_includedir} \\\ libdir=%{?buildroot:%{buildroot}}%{_libdir} \\\ libexecdir=%{?buildroot:%{buildroot}}%{_libexecdir} \\\ localstatedir=%{?buildroot:%{buildroot}}%{_localstatedir} \\\ sharedstatedir=%{?buildroot:%{buildroot}}%{_sharedstatedir} \\\ mandir=%{?buildroot:%{buildroot}}%{_mandir} \\\ infodir=%{?buildroot:%{buildroot}}%{_infodir} \\\ install
"buildroot"マクロや"_prefix"マクロを定義すれば上手く反映出来そうなことが分かった。
というわけで再度実験:
$ rpmbuild --define 'buildroot /foo' --define '_prefix /bar' --eval '%makeinstall' /usr/bin/make \ prefix=/foo/bar \ exec_prefix=/foo/bar \ bindir=/foo/bar/bin \ sbindir=/foo/bar/sbin \ sysconfdir=/foo/etc \ datadir=/foo/bar/share \ includedir=/foo/bar/include \ libdir=/foo/bar/lib \ libexecdir=/foo/bar/libexec \ localstatedir=/foo/var \ sharedstatedir=/foo/bar/com \ mandir=/foo/usr/share/man \ infodir=/foo/usr/share/info \ install rpmbuild: ビルドのための spec ファイルが指定されていません。
恐らくRPM作成時に、コマンドラインオプションや他のmacroファイル読み込みにより内部的に"buildroot", "_prefix"マクロが定義された後に、'%makeinstall' マクロが展開されるのだろう。
以上、CentOS 5.3, RPM-4.4.2.3 でのお話でした。
VMwareでLinuxゲストを使っていると、ゲスト上の時刻がどんどんずれていってしまう場合がある。しかもLinuxのDistributionによってそういった現象が発生したり、しなかったりする。NTPを起動しても、ずれが直らない。
そうした場合の対処法が、VMwareのKBとして公開されている。ディストリビューションおよび各ディストリビューションのバージョン毎に分けた一覧表となっており、基本的にはkernelパラメータにclock関連のオプションを追加するようになっている。
自分が時刻ずれに悩まされたのはCentOS5.3をゲストOSとして使った場合だったが、こちらも上記KB通りに "divider=10 clocksource=acpi_pm" をgrub.confでkernelパラメータに指定したところ、時刻ずれが直り、NTPの同期も動くようになった。
他のゲストOS(WindowsやSolarisなど)や、ホストとの時刻同期、仮想マシンならではの「時間」の取り扱いなどより深い調査が必要な場合は以下のVMware KBを参照。
Linuxをクライアントとして使う場合、立ち上げ時に一度、強制的にNTPの時刻同期をしてくれると助かる。
しかし、CentOSなどサーバー向けのLinuxでは、NTPのデフォルト設定としてそうした動作はしてくれないようになっている。サーバーでは毎日電源をON/OFFする訳ではないので、動きながらゆっくりと時刻を合わせていく動作がNTPのデフォルト設定になっていると思われる。
CentOS 5.3 の場合、以下の設定ファイルの編集により「立ち上げ時に一度、強制的にNTPの時刻同期」をしてくれるようになる。その後はデフォルト設定と同様、動きながらゆっくりと時刻合わせしてくれる。
/etc/sysconfig/ntpd:
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid" → OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid" # Set to 'yes' to sync hw clock after successful ntpdate SYNC_HWCLOCK=no → SYNC_HWCLOCK=yes
追記:
"-x"オプションについて日本語で分かりやすく解説してくれているサイト発見:
slewモード: 0.5msずつ時間を寄せていく。
stepモード: 不連続に一気に時間を寄せる。
128msのズレを境に、それよりズレが小さい時はslewモード、大きい時はstepモードになる。
"-x"オプションを指定することで、境界値が600秒になり、事実上slewモードonlyとなる。
ところが、slewモードだと10秒のズレを補正するだけでも 10s / 0.5ms = 20000秒かかることになり、元のズレが大きいと補正にえらい時間がかかってしまう。
推測:多分、このために"-x"が指定されている時は一度NTPサーバーを見て強制的に同期し、ズレをなるべく小さくしてからslewモードで動き出すよう、/etc/rc.d/init.d/ntpd スクリプト内で調整されたのかも。
TortoiseSVNでsvn+sshをputtyで接続する方法については、Web上に沢山エントリが挙がっているしTortoiseSVN付属のヘルプファイルでも丁寧に書かれている。
ただし、一点注意する点がある。
"svn+ssh://svnuser@SvnConnection/repos" や "svn+ssh://SvnConnection/repos" というリポジトリ指定では、"SvnConnection" というのが予めputtyで保存しておいたセッション名となる。
TortoiseSVN付属のTortoisePlink.exeからもputtyで保存しておいたセッション名を使えるため、接続に使うplink.exeはputty由来のものでも、TortoisePlink.exeでも基本的にはどちらでも良い。
ところが例外が存在する。
「Putty ごった煮版」を使ってINIファイルに設定を保存している場合である。
純正のputtyはINIファイルへの保存機能がない。TortoisePlinkは純正puttyから派生している為、当然Puttyごった煮版が保存したINIファイルは見ない。
従って、Puttyごった煮版でINIファイルに保存したセッション名を使う場合は、TortoisePlink.exeではなく、ごった煮版のplink.exeを使う必要がある。
「しかしplink.exeを使うと、通信がある度にコマンドプロンプトがちらちら表示されて煩わしい」という場合は、ごった煮版に"plinkw.exe"が付いてきているのでこちらを使うと良い。コマンドプロンプトでの入出力機能が削られており、TortoiseSVNから使う限りでは、実質上TortoisePlinkを使っているのと変わらない。
詳しく調べていないので話半分に読んで下さい。
pageant.exeをスタートアップに登録して、ついでに秘密鍵も追加させたい。というわけで、こんなBATファイルを作ってみた。
load_keys_into_pageant.bat:
C:\...\putty\pageant.exe C:\...\key1.ppk C:\...\key2.ppk
ところが、BATファイルをダブルクリックするとコマンドプロンプトが表示され、上記コマンドが終了待ちの状態で止まってしまう。コマンドプロンプトの×をクリックすればOKなのだけれど、何となくうざったい。
一旦手動でpageant.exeを起動しておき、その後上のBATを叩けばコマンドプロンプトの表示は一瞬で終わる。
pageant.exeがまだ起動していない状態で上のBATを実行した場合のみ、終了待ちでコマンドプロンプトが止まってしまうようだ。
しょうがないので、スタートアップに登録するのはpageant.exeへのショートカットリンクにしておき、上のBATはデスクトップなりクイック起動バーなりに置いておき、ログイン後最初にputtyを使う時にダブルクリックする使い方にした。
WebでDB使う作業をするたびにフリーのER図作成ツールを探してしまう。
JUDEもER図作成をサポートしたようだが、2010/08時点ではProfessional版以上でしか使えない。
DBDesigner4も試してみたが、カラム名などの表示が物理名だけで、論理名を表示出来ない。
論理名でも表示出来る、というのが結構重要なポイントなので(相手への説明用や、後々の自分用)、DBDesigner4は惜しくも落選。JUDEもProfessional版を買うか・・・踏ん切りが付かないので落選。いや、相手に渡すのはJPEGなど画像エキスポートしたのが有ればいいとは思うのだけれど、年に一度使うか使わないかのためだけに、バージョンアップが激しいJUDEシリーズを買うかどうかを考えたらさすがに手が出ない。四六時中UMLでの設計やER図つかったデータ設計してれば買ってた。
で、結局「A5:SQL Mk-2」というツールを使っている。
まずフリーであることと、Win7まで動作確認されていることも嬉しい。
それに論理名・物理名の表示切り替えもできる。
日本語ネイティブ対応。Oracle/MySQL/PostgreSQLとも接続可能。
あんまり名前は売れてないみたいだけど、基本機能は結構しっかりしてる。DB同期など行わず、単にスケッチとしてER図を書くだけでもそれなりに使いやすい。
シンプルで、手に馴染みやすいツールだと自分は思う。試してみて、気に入って貰えると嬉しい。
以前参考にした記事:
ただし、上はereg_replace使ってる。
こっちはpreg_replaceを使ってる。
function make_clickable($text)
{
$ret = ' ' . $text;
$ret = preg_replace("#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t<]*)#ise", "'\\1<a href=\"\\2\" >\\2</a>'", $ret);
$ret = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#ise", "'\\1<a href=\"http://\\2\" >\\2</a>'", $ret);
$ret = preg_replace("#(^|[\n ])([a-z0-9&\-_\.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret);
$ret = substr($ret, 1);
return($ret);
}
先日、大手自動車会社の品質検査部門に勤めている大学時代の友人がお盆帰省で戻ってきたので、一緒に秋葉原を散策したりお酒を飲んだりした。
そこで話題に出たのが「チーム内の話しやすさ」。
自分が転職して3ヶ月で会社を辞めることになってしまった遠因である、「チームリーダへの話しかけづらさ」や「個人での仕事の抱え込み」による色々な弊害というのが、友人の職場でもあるとのこと。
人間の問題である以上、業界は違えど同じ問題はどこにでも転がっているのだなと思った。
チームリーダの性格や気質でチームの雰囲気が変わるのはあちらも一緒。
チーム内のコミュニケーション不足で、「なんで言わなかったの!?」という状況が発生するのはあちらも一緒。
そういうのが頻発していって、チーム内の雰囲気が険悪になっていって負のスパイラルに突入していくのも一緒。
やっぱり対処法も似てる。
しかし、これらを実際に運用して良い雰囲気を作っているチームが、必ずしも成績(売上やPV)もずば抜けているわけではない所まで似てるのが哀しい。そう上手く話が進むわけではないようだ。
悩んだ末に手を伸ばしたのが仏教、それも原始仏教に近い教えである点も一緒だった。友人は西洋哲学にも手を出したようだが、「理屈っぽくてついていけなかった」と言っていた。
もしそうした人間の問題で悩んでいるのであれば、自己啓発書や組織運営のビジネス書を100冊読むより、仏教、それも原始仏教や上座部仏教の易しめの本を数冊読む方をお奨めする。
ダイビングの講習で教わることの一つに、「水中で激しい動きをしてはいけない」というのがある。
水中の水の流れは想像以上の負荷がかかり、無理に泳ごうとするとあっという間に息切れしてしまう。
また、只でさえタンク内の空気には限界が有るのだから激しい運動をすると空気消費も激しくなり、エア切れの危険性が高まる。
重要なのは水の流れに逆らわないこと。
特に陸へ戻る時、波の動きに合わせて水中でも水の流れが寄せたり引いたりしている。
それの流れに上手く合わせて、流れに逆らいそうな時は動きを止め、追い風のタイミングで泳ぐ。そうすると楽に陸へ戻れる。
組織は、世の中は、赤の他人の大集団は、まるで海水のようだ。
無理に逆らおうとしても、自分一人で動かそうとしても、どうにもならない。
気力と体力を徒に消費し、疲れて終わる。
ダイビングでもしも激しい運動で疲れ、息切れしてしまったらどうするか?「全ての動作を一旦止め、岩などに掴まり休憩すること」と教わる。
もしもSE技術者が、自分の技術力で組織や会社を変えようとしたり、オープンソースや先端の開発技法を導入しようとしても周りから無視されたり思うように巻き込めなかったり賛同を得られなかったりしたら、全てのそうした活動を一旦停止し、休むと良いかも知れない。
SE技術者が一人、そうした活動を停止したところで世の中が止まるわけではない。
まず休み、息を整えて流れを掴んだら、また泳ぎ出せばよい。
・・・とかゆー戯れ言で救われりゃ、世話無いんだけどねー、自分。
PostgreSQL関連の雑多なメモ。
postgresql.conf or postmasterの"-c"オプション or PGOPTIONS環境変数で設定。いくつかは"SET"SQLコマンドで実行時に変更出来る。
マニュアル:
設定値:
client_encoding(string)
確認:
psql# SHOW client_encoding; client_encoding ----------------- SJIS (1 行)
変更:
SET client_encoding = 'EUC_JP';
設定値:
timezone(string)
確認:
psql# SHOW TIME ZONE; TimeZone ---------- JST-9 (1 行)
タイムゾーン専用のSET SQLコマンド:
SET [ SESSION | LOCAL ] TIME ZONE { タイムゾーン | LOCAL | DEFAULT }
ex) SET TIME ZONE 'JST-9';
マニュアル:
現在のpsqlクライアントの変数内容を確認:
\set 特定の変数だけ確認したい場合は \echo :変数名
変更:
\set FOOBAR newvar
現在値の確認:
\echo :AUTOCOMMIT
psqlクライアントの変数 "AUTOCOMMIT" でon/offを切り替える。
\set AUTOCOMMIT {on|off}
PostgreSQLの少なくとも7.4以降では、CREATE TABLE実行時に "serial" を型に指定すると、対応するシーケンスを自動生成してnextval()してくれるようになります。
今回は、連番キー値が格納されるが主キー設定もされていないしシーケンスも使われていないカラムに対し"serial"型のような自動採番を設定する方法についてメモしておきます。
つまり、
CREATE TABLE foo (id integer, name text);
これを、
CREATE TABLE foo (id serial PRIMARY KEY, name text);
したことにします。
なお動作確認は PostgreSQL 8.1 です。