arachansan's diary

誰にも左右されず、硬派なBlogを書きます。

MSYS2でOpen usp Tukubaiが動かなかったでござる

おぉ!待ってました。 Windows + MSYS2で心置きなくOpen usp Tukubaiが動かせそう。 と思いきや。

kunst1080.hatenablog.com

Open-usp-Tukubai 動かない。 MSYS2にインストールはできるのですが、 動きません。

Open-usp-TukubaiはPython2奨励なのに、 pacmanは勝手にpython3をインストールします。

そして勝手にPython3で実行しようとするので動きません。

環境

  • Windows 7 SP1 (x64)
  • MSYS2(x64)
  • update-coreにて最新版にアップデート済み (2015/11/19現在)

現象

くんすと氏のサイトのとおりにインストールを実行

$ pacman -U open-usp-tukubai-HEAD-1-any.pkg.tar.xz パッケージをロード...
依存関係を解決しています...
衝突するパッケージがないか確認しています...
パッケージ (2) python-3.4.3-2 open-usp-tukubai-HEAD-1
合計インストール容量: 75.21 MiB
インストールを行いますか? [Y/n] Y
...(省略)....

で試しにjoin0を実行してみると SyntaxErrorでまともに動いてくれません。

$ join0
File "/usr/bin/join0", line 217
print tline.getField(0)
^
SyntaxError: invalid syntax

対処方法

Python2で動かすようにすればいい。

幸か不幸かOpen-usp-TukubaiはPythonスクリプトなので、 先頭のスクリプト起動の指定を python から python2 に変更してみる。

まずはPython2をインストール

$ pacman -S python2

join0の先頭を python2に書き換え

$ head -n 1 join0
#!/usr/bin/env python

$ sed -i 's/python/python2' /usr/bin/join0

$ head -n 1 join0
#!/usr/bin/env python2

お試し実行

$ join0
Usage   : join0 [+ng<fd>] key=<n> <master> <tran>
Version : Fri Oct 21 11:26:06 JST 2011
          Open usp Tukubai (LINUX+FREEBSD/PYTHON2.4/UTF-8)

お、動いたけど…。 全てのOpenTukubaiコマンドにこれを実行しないと…。

シェル芸スタート

まずは、ls -lでタイムスタンプでも見てみる。

$ cd /usr/bin
$ ls -l | awk '$6~/10. * /' | awk '$7~/15. * /'
-rwxr-xr-x   1 yusuke None     3983 1015 19:58 calclock
-rwxr-xr-x   1 yusuke None     4735 1015 19:58 cgi-name
...(省略)...

2015年10月15日のファイルは全て Open usp Tukubaiのようだ。

findで絞り込んで xargsで渡す戦略でいく。

$ find -mtime 34
./calclock
./cgi-name
./check_attr_name
./check_need_name
./cjoin0
...(省略)...
$ find -mtime 34 -type f | xargs head -n 1
==> ./calclock <==
#!/usr/bin/env python

==> ./cgi-name <==
#!/usr/bin/env python

==> ./check_attr_name <==
#!/usr/bin/env python

==> ./check_need_name <==
#!/usr/bin/env python

==> ./cjoin0 <==
#!/usr/bin/env python

...(省略)

お、sedに食わせても大丈夫だな。

$ find -mtime 34 | xargs sed -i 's/python/python2/'

成功!

$ find -mtime 0 -type f | xargs head -n 1
==> ./calclock <==
#!/usr/bin/env python2

==> ./cgi-name <==
#!/usr/bin/env python2

...(省略)...
$ join2
Usage   : join2 [-d<string>] key=<n> <master> <tran>
Version : Wed Oct 26 03:01:58 JST 2011

終わりに

pacmanのパッケージを作ってくれた作者には、問題点を報告した。 Github Issueにも書くべきかな?