CIFSのsvnリポジトリラッパ(追記)
2011-03-28-1 / カテゴリ: [svn][Apache][cygwin] / [permlink]

[2011-03-08-1]の設定だと、updateはできるけど以下のエラーでcommitができない。(場合がある、のかも。少なくとも自分のとこでは。ファイルサーバの具合の可能性?)

コンソール
svn: Can't chmod '/cygdrive/x/svn/db/tempfile.2.tmp': Permission denied
svn: MKACTIVITY of '/repos/testrep/!svn/act/0000012ef9fa5ad6': 500 Internal Server Error (http://127.0.0.1:8080)
Eclipseのダイアログだと「Error while creating module: org.tigris.subversion.javahl.ClientException」がエラーを拾ってるみたい。

んで、色々やった結果、ネットワークドライブのパスを
 - SVNPath "/cygdrive/x/svn"
 + SVNPath "x:/svn"
にすればOK。
Referrer (Inside): [2011-03-08-1]

CIFSのsvnリポジトリラッパ
2011-03-08-1 / カテゴリ: [svn][Apache][cygwin] / [permlink]

某所のsvnリポジトリがCIFS(Windowsファイルサーバ)にしかなく、どうしても手元のeclipse(subclipse)からチェックアウトできなかったので、ローカルのApacheでsvnサーバを立ててラッパとして動作させた。

windows用のApacheバイナリだと、UNC/ネットワークドライブともに(ファイルが見えなかったりログオン不可と出力されたりで)どうしてもうまくいかなかったので、cygwinのApache+svnで構築。
入れるパッケージは
apache2
subversion
subversion-apache2
あたり。

とりあえずdav設定は[2008-02-22-1]の流れで特に問題なし。
デフォルトでDigest認証設定になってるので、Basicに変えるなりなんなりと。
設定ファイルは /etc/apache2/extra/httpd-dav.conf
--- original/extra/httpd-dav.conf	2007-09-17 06:10:55.001000000 +0900
+++ extra/httpd-dav.conf	2011-03-08 13:27:22.246250000 +0900
@@ -16,5 +16,5 @@
 
-Alias /uploads "/usr/uploads"
+Alias /repos "/var/repos"
 
-<Directory "/usr/uploads">
+<Directory "/var/repos">
     Dav On
@@ -24,3 +24,3 @@
 
-    AuthType Digest
+    AuthType Basic
     AuthName DAV-upload
@@ -28,3 +28,3 @@
     #   htdigest -c "/usr/user.passwd" DAV-upload admin
-    AuthUserFile "/usr/user.passwd"
+    AuthUserFile "/etc/apache2/user/htpasswd"
 
@@ -32,5 +32,6 @@
     # to the admin user.
-    <LimitExcept GET OPTIONS>
-        require user admin
-    </LimitExcept>
+    #<LimitExcept GET OPTIONS>
+    #    require user admin
+    #</LimitExcept>
+    require valid-user
 </Directory>
あと、標準だとこのファイルがincludeされないのでhttpd.confにinclude追加する。(下記ラスト部分)
--- httpd.conf.default	2011-03-08 11:44:39.731750000 +0900
+++ httpd.conf	2011-03-08 12:47:10.558750000 +0900
@@ -39,3 +39,3 @@
 #Listen 12.34.56.78:80
-Listen 80
+Listen 8080
 
@@ -110,2 +110,6 @@
 
+# svn
+LoadModule dav_svn_module lib/apache2/mod_dav_svn.so
+Include /etc/apache2/extra/httpd-svn.conf
+
 <IfModule !mpm_netware_module>
@@ -149,3 +153,3 @@
 #
-#ServerName www.example.com:80
+ServerName localhost
 
@@ -446,3 +450,3 @@
 # Distributed authoring and versioning (WebDAV)
-#Include /etc/apache2/extra/httpd-dav.conf
+Include /etc/apache2/extra/httpd-dav.conf

Subversion用の設定はテンプレが見当たらなかったので他の環境から持ってきた。
extra/httpd-svn.confを作って
<IfModule mod_dav_svn.c>
<Location /repos/foo>
	DAV	svn
	SVNPath "/cygdrive/c/work/repos"
</Location>

<Location /repos/testrep>
	DAV	svn
	SVNPath "/cygdrive/x/svn"
</Location>
</IfModule>
こんな感じ。(xはネットワークドライブ)
多バイト文字が入ったパスだと(UTF-8にしてても"Can't converet string from 'UTF-8' to native encoding"とか出力されて)うまくいかないけど…

まぁ、CIFSでSubversion使うなってことよ。

そういや、subclipseだとhostsを見ないようだ。http://localhost(:8080)だとアクセスできなかったけど、http://127.0.0.1(:8080)ならOK。
ググると file:/// も使えるような記述はあるんだけどなぁ…

[2011-03-28-1]追記。↑だとcommitできない。
Referrer (Inside): [2011-03-28-1]

nkfでエンコード変更して上書き保存
2011-02-22-2 / カテゴリ: [win][cygwin] / [permlink]

--overwrite または --in-place する。
% find . -name "*.java" | xargs nkf -w --overwrite
デフォルトだと標準出力へエンコード変更結果を出力するけど、find|xargsと組み合わせて複数ファイル一気に変更、なとき。
--overwrite はタイムスタンプを変更しない。
--in-place はタイムスタンプが更新される。
-w は utf-8 へ変更

ソースからnkfインストール
2011-02-22-1 / カテゴリ: [win][cygwin] / [permlink]

[2005-12-21-3]の日記だと、http://cygwin-je.sourceforge.jp/cygwin_je/ からパッケージインストールしてたみたいだけど、今試したら setup.bz2.sig がないなどエラーになってインストールできなかったので結局makeした。

ソースは http://sourceforge.jp/projects/nkf/ から。
今日の時点で ver 2.1.1 (2010-09-13版)
wget すると、すでにMakefileはあるので
% make
% make test
% make install
で /usr/local 以下にインストールされる。
インストール先を変えたければ Makefile の prefix をイジればいいはず(未確認)

クリップボードのテキストをコマンドラインperlで変換
2010-01-31-1 / カテゴリ: [cygwin][perl] / [permlink]

  • /usr/bin/getclip
クリップボードの中身をstdoutへ出力する。
cygutilsパッケージに含まれる。

  • /usr/bin/putclip
stdinをクリップボードへコピーする。
cygutilsパッケージに含まれる。

これらとperl(-e によるコマンドライン実行)をパイプで組み合わせれば、「エディタの置換機能じゃちょっと困難だけど、スクリプトにするまでもない変換」なんかをサクサク実行。

例: 開いているエクセルの特定部分をコピーしたデータ(tab区切り)をpukiwikiの表形式に変換
% getclip | perl -ple 's/^|[,\r]/|/g' | putclip
入力
入力エクセル
出力
|ID|曲名|アーティスト|ファイルサイズ|再生時間|再生回数|
|4863|私の時間|初音ミク|6412945|266919|1024|
|4879|SUPER HATSUNE BEAT vol.1|初音ミク|4613135|575373|919|
|4917|SING&SMILE LONG ver.|初音ミク|1809195|223869|919|
|5081|ぴんぽんだっしゅ!|初音ミク|2188842|136097|954|
|5133|みくみくにしてあげる♪|初音ミク|1198334|99134|940|
|5149|ラジカルペイント|初音ミク|1572383|97567|984|
|5193|教えて!! 魔法のLyric|初音ミク|2070128|257619|952|
|5257|電脳スキル|初音ミク|3157470|196832|866|
|5267|魔法少女ラジカルペイント(Long Ver)|初音ミク|1838250|228649|885|
|5691|とらいあんぐる☆Girl's Heart|初音ミク|3608040|180035|1091|

例が適当すぎるだろ…

-p はこっち
スクリプトでがっつり変換するならこちら。=> [2006-03-08-3]

cygwinでscreen
2007-03-16-1 / カテゴリ: [cygwin][screen] / [permlink]

[2005-09-25-3]の続き。
1年半放置してたけど、久々に調べてみたらよーやく解決。
cygwinのscreen
症状がまったく同じだ^^;
めんどっちいのでバイナリを落としてきた。

cygwin/MinGW で Windows GUIアプリ
2007-03-14-1 / カテゴリ: [programming][win][cygwin][c] / [permlink]

朝、目覚まし時計に反応できるようになった今日この頃。2度寝しないように「うりゃ!」と叫んでなんとか頑張ってる。

cygwin の gcc でも、WinMain 関数で普通にコンパイルできるのね。
-mno-cygwin オプションで、cygwin1.dll をリンクしないネイティブアプリ、
-mwindows オプションで、GUIアプリができる。
(-mwindows がないと、exe実行時にコマンドプロンプトも表示されてしまう)

関連:bcc でWindowsプログラミングのコンパイル[2005-08-01-1]
続きを読む

だいなファイラのパスでcygwinのzshをckで起動
2007-03-02-1 / カテゴリ: [アプリ][cygwin][win] / [permlink]

参考:Project HeavyMoon. :: ごく些細な Tips 集
だいなファイラー DYNA
ck - terminal emulator

だいなの外部コマンドに
名前(N):ck
実行ファイル(E):cmd.exe
パラメータ(P):/c start /d "$D" "zsh" C:\cygwin\bin\zsh.exe --login -c ck.exe
を登録する。($D はディレクトリ名のマクロ)
んで、この外部コマンドを適当にキーアサイン。

で、このままだと zsh 起動時のディレクトリが ~ になってしまうので、/etc/zprofile の
# Make sure we start in home unless invoked by CHERE
if [ ! -z "${CHERE_INVOKING}" ]; then
  unset CHERE_INVOKING
else
  cd "${HOME}"
fi
cd "${HOME}"の部分をコメントアウトする。
これで、だいなからアサインしたキーをタイプすれば、だいなのカレントで zsh@ck が起動する。
c:\cygwin\usr\local で実行すれば /usr/local
c:\windows\system32 で実行すれば /cygdrive/c/windows/system32
(~/work に c:\documents and settings\zaki\My Documents をマウントしてれば) c:\documents and settings\zaki\My Documents で実行すれば ~/work になる。

cmd.exe や ckw をだいなのカレントで実行したいときは、実行ファイルにcmd.exe や ckw の実行ファイルを指定・パラメータ無し・実行時ディレクトリをカレントウィンドウのディレクトリにすればOK

だいなじゃなくても、
cmd.exe /c start /d "カレントにしたいwinのパス" "zsh" C:\cygwin\bin\zsh.exe --login -c ck.exe
を起動するショートカットで大丈夫かな。

cygwinの素のターミナルやrxvtは参考ページに書いてある。

何年も使ってるのに、よーやく連携できるようになったか。

GD::Barcode::QRcodeでQRコード作成
2006-12-12-1 / カテゴリ: [携帯][win][cygwin][perl] / [permlink]

約1年明けての検証…[2006-01-10-2]

cpan> install GD::Barcode::QRcode
cpan> install GD
cygwin環境での GD のビルドには libgd-devel パッケージ(cygwinパッケージ)が必要(gdも?)

基本
use GD::Barcode::QRcode;

binmode STDOUT;
print GD::Barcode::QRcode->new('foobarbaz')->plot->png;
とりあえずこれで、PNGのバイナリが出力される。(結果はリダイレクトする)
ただし何のオプションも指定しない場合は、デフォルトのQRコードバージョン:1 になり、128bit以上の元データに対して
Overflow error. version 1
total bits: 132  max bits: 128
とエラーになる(ので使い物にならない)。
この状態でエンコードできるデータ量は単純に128/8==16バイトではなく、数値を与えるかasciiを与えるか等で指定可能バイト数が変化する。モジュール内部で対象データを自動判別している模様。

コンストラクタ時にQRコードバージョン・誤り訂正レベル・出力画像サイズが指定できるので、ハッシュのリファレンスでパラメタを与えてやる。
my $qr = new GD::Barcode::QRcode->new(
                                      'http://www.jp-z.jp/',
                                      { Ecc=>'L', Version=>2, ModuleSize=>2} );
print $qr->plot()->png();

Ecc は誤り訂正レベル
レベル訂正能力
L約7%
M約15%
Q約25%
H約30%
未指定時は M になるっぽい。誤り訂正レベルを上位にすると、符号化できるデータ量は減少する。

Version は QR コードのバージョン
未指定時は1になるっぽい。バージョンをあげると符号化できるデータ量が増加し、画像も細かくなる。バージョン増加に伴い、出力画像のピクセル数も増加する。GD::Barcode::Qrcode では、縦横4ピクセルずつの余白が付加される。
バージョン(n)に対する出力画像の1辺のピクセル数(pixel)は次のよーな感じ。
pixel = 21 + ((n - 1) * 5)
バージョン1で21x21(余白を入れた画像の解像度は29x29)。以降、バージョンを1上げるごとに5ピクセル増加。1から40まで指定可能。
バージョン・誤り訂正レベルの組み合わせによる最大入力サイズはここ
バージョンを上げると、生成するのにそれなりに負荷がかかる^^;

ModuleSize は出力画像の解像度の指定。余白を含めた画像サイズの倍率になる。未指定時・0指定時は1と同じ。縦横均等。

CGIでブラウザへの出力として使うには、(PNGであれば)HTTPヘッダで "Content-Type: image/png" を吐いて、plot()->png() を出力させれば良い(はず。未確認)。

参考
CPAN: http://search.cpan.org/~kwitknr/GD-Barcode-1.15/Barcode.pm
QRコードの作り方〜バージョンの決定〜: http://www.denso-wave.com/qrcode/qrgene2.html


V603SHのQRコード認識能力はイマイチ。au(BREW3.1)は結構高速…。デコードエンジンのつくりかな…
Referrer (Inside): [2007-02-27-1]

ファイルが依存しているライブラリの表示
2006-11-17-2 / カテゴリ: [win][cygwin] / [permlink]

linux だと ldd を使うとこだけど、cygwin には ldd がない。
cygwin 環境では cygcheck を使う。
$ cygcheck ls
Found: C:\cygwin\bin\ls.exe
C:/cygwin/bin/ls.exe
  C:\cygwin\bin\cygwin1.dll
    C:\WINDOWS\system32\ADVAPI32.DLL
      C:\WINDOWS\system32\ntdll.dll
      C:\WINDOWS\system32\KERNEL32.dll
      C:\WINDOWS\system32\RPCRT4.dll
  C:\cygwin\bin\cygintl-8.dll
    C:\cygwin\bin\cygiconv-2.dll
$ cygcheck c:/WINDOWS/system32/ftp.exe
c:/WINDOWS/system32/ftp.exe
  c:/WINDOWS/system32\msvcrt.dll
    c:/WINDOWS/system32\KERNEL32.dll
      c:/WINDOWS/system32\ntdll.dll
  c:/WINDOWS/system32\ADVAPI32.dll
    c:/WINDOWS/system32\RPCRT4.dll
  c:/WINDOWS/system32\USER32.dll
    c:/WINDOWS/system32\GDI32.dll
  c:/WINDOWS/system32\WS2_32.dll
    c:/WINDOWS/system32\WS2HELP.dll
  c:/WINDOWS/system32\MSWSOCK.dll

gccでcygwin1.dllに依存しないようコンパイル
2006-11-17-1 / カテゴリ: [win][cygwin][c] / [permlink]

-mno-cygwin を付加する
$ gcc -mno-cygwin foobar.c
これでBCC要らない…のか?
$ cygcheck ./a
.\a.exe
  C:\WINDOWS\system32\msvcrt.dll
    C:\WINDOWS\system32\KERNEL32.dll
      C:\WINDOWS\system32\ntdll.dll

nkf はどこ?
2005-12-21-3 / カテゴリ: [win][cygwin] / [permlink]

http://cygwin-je.sourceforge.jp/cygwin_je/
に、Util カテゴリにあった。
[2005-08-29-1]の要領で。
Referrer (Inside): [2011-02-22-1]

cygwin で fetchmail + procmail
2005-12-21-2 / カテゴリ: [win][cygwin][メール] / [permlink]

[2004-08-21-1]
.fetchmailrc, .procmailrc のモードは644 600
~ は 755 に。

...前にも同じことやってた。

パッケージ管理あれこれ
2005-11-05-1 / カテゴリ: [cygwin][debian][redhat][Solaris][command] / [permlink]

すぐ忘れるのでメモ

インストール済みのパッケージ一覧出力
# dpkg -l      (debian)
# rpm -qa      (redhat)
# cygcheck -cd (cygwin)
# pkginfo      (Solaris)

インストール済みのパッケージ foo に含まれるファイル一覧
# dpkg -L foo     (debian)
# rpm -ql foo     (redhat)
# cygcheck -l foo (cygwin)
# pkgchk -vn foo  (Solaris)

ファイル /foo/bar をインストールしたパッケージ
# dpkg -S /foo/bar     (debian)
# rpm -qf /foo/bar     (redhat)
# cygcheck -f /foo/bar (cygwin)
# pkgchk -lp /foo/bar  (Solaris)

solaris はかなりアヤシイ.

Cygwin に screen インストール(リベンジ)
2005-09-25-3 / カテゴリ: [win][cygwin][screen] / [permlink]

[2005-06-09-1]の続き。なんとなく再チャレンジ。

configure: checking fifos...
- your fifos are usable
rm: cannot remove `conftest.exe': Permission denied
やっぱ同じところでエラーになり、conftest.exe が削除できない。
で、調べてみると、conftest プロセスが実行中で削除できないみたい。
rm は効かないが、mv は効くようなので、configure スクリプトで rm のところを mv に変えてみた。

変更点は、4263 行目付近の
fi
rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
rm -f /tmp/conftest*
の直後に
if [ -f conftest.exe ]; then
mv conftest.exe /tmp/zzz
fi
と追加。

すると、configure はとりあえず正常に終了した。

が、make すると、
hmiyazaki@chaource:/usr/local/src/screen-4.0.2$ make
CPP="gcc -E " srcdir=. sh ./osdef.sh
AWK=gawk CC="gcc -g -O2" srcdir=. sh ./comm.sh
AWK=gawk srcdir=. sh ./term.sh
gcc -c -I. -I.    -g -O2 screen.c
gcc -c -I. -I.    -g -O2 ansi.c
gcc -c -I. -I.    -g -O2 fileio.c
gcc -c -I. -I.    -g -O2 mark.c
gcc -c -I. -I.    -g -O2 misc.c
misc.c: In function `xsetenv':
misc.c:619: error: 関数 `setenv' への引数が少なすぎます
make: *** [misc.o] エラー 1

…続く orz
Referrer (Inside): [2007-03-16-1]

ck の起動
2005-09-25-2 / カテゴリ: [win][cygwin][アプリ] / [permlink]

単に ck.exe を起動すると bash は起動するが、PATH の設定が win の先にきてしまい、find や telnet あたりで cygwin のコマンドが実行されない。

ので、ck.exe の起動は
C:\cygwin\bin\bash.exe --login -c ck.exe
とした。
(ck.exe は /usr/local/bin/ck.exe にある)

起動が少し重くなった (/_-;

man で fgets: No such file or directory
2005-09-25-1 / カテゴリ: [win][cygwin] / [permlink]

いつのまにか man が全く使えなくなった。perldoc も使えん。
hmiyazaki@chaource:~$ man ls
Unrecognized line in config file (ignored)
KNROFF          /usr/bin/groff -Tkorean -mandoc
Unrecognized line in config file (ignored)
KNEQN           /usr/bin/eqn -Tkorean
fgets: No such file or directory
Error reading man page /usr/share/man/man1/ls.1.gz
No manual entry for ls
groff や man やら reinstall してみてもとくに変化なし。

検索すると、http://www.okisoft.co.jp/esc/cygwin-7.html こんなページを発見。エラーメッセージもほぼ同等。
設定ファイルは,原則として最初にインストールされたものが使われます。パッケージを更新したとき,昔のままの設定ファイルが不具合を起こすことがあります。最近の例では,10 月に man パッケージが man-1.5o-1 に更新されたとき,この現象が起こりました。更新後,man コマンド実行のたびにエラーメッセージが表示されるようになったのです。

というわけで、/etc/defaults/usr/share/misc/man.conf を /usr/share/misc/man.conf にコピー。
すると、
Unrecognized line in config file (ignored)
KNROFF          /usr/bin/groff -Tkorean -mandoc
Unrecognized line in config file (ignored)
KNEQN           /usr/bin/eqn -Tkorean
は出力されなくなり、
hmiyazaki@chaource:~$ man ls
fgets: No such file or directory
Error reading man page /usr/share/man/man1/ls.1.gz
No manual entry for ls
って、fgets のエラーってなんだよ… そんなファイルかディレクトリねーよって、意味わかんねーし。
よくわからんので strace してみたがやはりよくわからん。
(man のトレースは pid がわからんので、bash をトレース。てか、cygwin にも strace あるのね)

で、ためしに違うもので man してみると
hmiyazaki@chaource:/bin$ man less
Error executing formatting or display command.
System command (cd "/usr/man" && (echo ".pl 1100i"; /usr/bin/cat '/usr/man/man1/less.1'; echo ".\\\""; echo ".pl \n(nlu+10") | /usr/bin/tbl | /usr/bin/nroff -c
-mandoc 2>/dev/null | /usr/bin/less -isrR) exited with status 127.
No manual entry for less
って感じ。
まぁ、これなら調べられないこともないかと、System command 以下を手で実行してみる。
すると、/usr/bin/nroff がコケる。
bash: /usr/bin/nroff: /bin/sh: bad interpreter: No such file or directory
というわけで /usr/bin/nroff を見るが、1行目は特におかしいところなし。
で、いろいろ見てたら、/bin/sh がない… なんでだろ。

とりあえず、
$ cd /bin
$ ln -s bash.exe sh.exe
したら、全て直った。
perldoc も。

ターミナルソフトのタイトルバーにCWD(とか)を表示する
2005-09-13-2 / カテゴリ: [linux][cygwin][shell] / [permlink]

bash の場合
export PROMPT_COMMAND='echo -ne "\033]0;${USERNAME}@${HOSTNAME}: ${PWD}\007"'
set-language-env の設定だけど :D

PROMPT_COMMAND は bash の環境変数で、bash がプロンプトを出す前に実行されるもの
Bash Prompt HOWTO

んーと、bash の PS1 とかで有効な \w とかが使えないので、ホーム以下のパスは ~ を使いたければ
export PROMPT_COMMAND='echo -ne "\033]0;${USERNAME}@${HOSTNAME}: `pwd|sed -e s#$HOME#~#`\007"'
かな。


追記
pwd|sed にすると、cygwin だと結構重いのでやめました。

ck - terminal emulator
2005-09-12-2 / カテゴリ: [win][cygwin][アプリ] / [permlink]

ck - terminal emulator
良いね。軽くて。
UTF-8対応TeraTerm Proで、telnet/ssh/cygwin 併用してたけど、cygwin のターミナルなら、こっちがいいかも。出力が EUC な cygwin コマンドと、win の SJIS な出力が、何も考えなくてもちゃんと表示してくれるとこが良い。
TeraTermの半透明は、タイトルバーまで半透明になってちょっと気持ち悪かったんで…。でも、skinを使わないと半透明できないぽいのかな。まぁ別にいいか。

あ、ck 起動して、そこから /usr/bin/ssh とか使えば関係なくなる…?

cygwin JE のパッケージをインストールする
2005-08-29-1 / カテゴリ: [win][cygwin] / [permlink]

通常の setup.exe を使ったネットワークインストールのダウンロードサイトを選択する画面で、User URLに http://cygwin-je.sourceforge.jp/cygwin_je/ を入力・[add]押下する。で、サイトリストに入力した URL(ドメイン名のみ) が追加されるので、そいつを選択し次へすすむ。

lv もこっちにある。
Referrer (Inside): [2005-12-21-3]
カテゴリ: cygwin / 1 2 3 次ページ

最終更新時間: 2013-05-02 16:12