テクニカルプア

備忘録と若干の補足

wicd 1.7.2.4-5 で wicd-curses が立ち上がらない問題についての対処法

 先程なんとなくwicd-cursesと叩いてみたら以下のようなメッセージを吐いてwicd-cursesが立ち上がらなくなっていたことに気がついた。

Traceback (most recent call last):
File "/usr/share/wicd/curses/wicd-curses.py", line 1063, in 
main()
File "/usr/share/wicd/curses/wicd-curses.py", line 995, in main
ui.run_wrapper(run)
File "/usr/lib/python2.7/site-packages/urwid/raw_display.py", line 242, in run_wrapper
return fn()
File "/usr/share/wicd/curses/wicd-curses.py", line 88, in wrapper
return func(*args, **kargs)
File "/usr/share/wicd/curses/wicd-curses.py", line 1003, in run
app = appGUI()
File "/usr/share/wicd/curses/wicd-curses.py", line 548, in __init__
self.wiredCB = urwid.Filler(WiredComboBox(wiredL))
File "/usr/share/wicd/curses/wicd-curses.py", line 378, in __init__
self.__super.__init__(use_enter=False)
File "/usr/share/wicd/curses/curses_misc.py", line 352, in __init__
self.focus = focus
AttributeError: can't set attribute

 昨年末にCUIでいろいろしてたときはwicd-cursesにお世話になったことは確実なので今立ち上がらないというのはおかしい。早速「AttributeError: can't set attribute wicd archlinux」みたいな感じで検索かけてみると以下のページがヒットした。

FS#33378 : [wicd] wicd-curses broken(https://bugs.archlinux.org/task/33378)

 launchpadのwicd本家にもバグとして報告されており、最新版ではパッチが当てられて問題解決している様子。だがarchlinuxでパッチ適用済みの最新版wicdがすぐに降ってくるとは限らない。幸いバグ修正用のPKGBUILD用パッチが上のページに貼られていたのでそれを適用し、ABSでwicdをコンパイルして使うことにした。wicdのソース用のパッチも案内されてはいた(launchpadへのリンク)が、折角ABS用のがあるならそちらを使うほうが楽なので。

 ちなみに/var/log/pacman.logから年明け後にwicdあるいはpythonに関係するパッケージをインストール乃至アップグレードしたかどうか確認したが、KDEのpython2用バインディング以外にはpython2-urwid(ver. 1.1.1-1)しか見つからず、これが原因のようだ。バグ報告とも一致する。

 さて、まずはABSのソースツリーを最新版に更新する。

# abs

 次にwicdのPKGBUILDを適当なディレクトリに持ってくる。wicdはextraリポジトリに属すので以下のようにしてやる。

 "ramdisk"というのは私の環境に於ける作業用ディレクトリである。

$ cp -a /var/abs/extra/wicd ~/ramdisk

 そして上のページからPontus Andersson氏の投稿にあるwicd-pkgbuild.patchをダウンロードし、それをwicdディレクトリに保存する。作業後はこんな感じになる。

$ cd ~/ramdisk/wicd && ls
wicd-pkgbuild.patch deepcopy+python27-fixes.patch PKGBUILD
wicd-daemon         wicd-scripts-execution.patch  wicd.install
ChangeLog           dbus_string_fix.patch         net-tools.patch
wicd-locale.patch   wicd.desktop                  wicd_in_usr.patch

 次に以下のようにしてパッチを適用する。patchはパッチを当てるファイルとのディレクトリの位置関係が大事らしいのだがwicd-pkgbuild.patchの2行目を参照するとPKGBUILDと同一のディレクトリに置くように指定されているのでこのまま実行する。

$ patch < wicd-pkgbuild.patch

 これでパッチの適用が完了した。最後に

$ makepkg -s -i

してコンパイル、インストールしてやればwicd-cursesを使えるようになる。