TeXインストールエラー「JsclassesのGetInfoで例外が発生しました」対応 ― 2009年07月27日 22時33分29秒
10年以上前に作成したLaTeXのドキュメントを久々に確認しようとおもいましたが、最近購入したパソコンの環境の全てにおいてLaTeX環境はインストールしていませんでした。
ログには「Jsclasses::GetInfo : getaddrinfo: no address associated with hostname.」または「Jsclasses::GetInfo : 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。 - connect(2)」と格納されていると思います。
現象としては作者の掲示板の「jsclassesについて」と同じです。
私の想像ですが、この現象は接続しているプロバイダなどの環境に依存しているのではないかと思います。
そこで簡単にインストールする方法を検索したところ、阿部紀行氏の作成したTeXインストーラというものがあるということがわかりました。
全体のインストールはこちらが詳しいでしょう。
ところが、私の環境ではインストールの最初の段階でエラーが出ます。同じ症状の人も結構検索すると見つかります。
ということで以下に対応について整理してみます。
現象
インストールの初期段階で「JsclassesのGetInfoで例外が発生しました」というエラーダイヤログが表示されて先に進めません。ログには「Jsclasses::GetInfo : getaddrinfo: no address associated with hostname.」または「Jsclasses::GetInfo : 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。 - connect(2)」と格納されていると思います。
現象としては作者の掲示板の「jsclassesについて」と同じです。
この掲示板ではインストーラとしてのエラーは解決していません。
対応方法
以下の概要で対応できます。インストーラの機能をあくまでも使うということが前提です。- 奥村さんのページからjsclasses本体をダウンロード
- ダウンロードしたjsclasses.zipをkakuto3フォルダにコピーする
- kakuto3\pluginフォルダにあるjsclasses.rbファイルを修正する
jsclasses.rbの修正内容
奥村さんのページからダウンロードするURLが記述されている部分をローカル指定に変えてしまいます。修正結果は以下のようになります。要は13行目のURLを「file://」の形式に変更して57行目から87行目をコメントにして「http:チェックをはずす」ということです。
require 'net/http' require 'uri' require 'time' Net::HTTP.version_1_2 class JsclassesClass def initialize @ini = "" @log = "" @url = "file:///c:/kakuto3/jsclasses.zip" @size = 0 @success = false @definstall = true return true end def Info return [{"softname" => "jsclasses", "info" => "奥村さんによる日本語用のクラスファイルです."}] end def Init(ini,log) @ini = ini @log = log end def IsNeedReboot() return false end def IsNeedSetting(soft) return false end def Set(hwnd,soft) return end def GetInfo(hwnd) Log("jsclassesの情報取得開始"); if Kakuto3::GETINIINT(@ini,"Connect","UseNetwork") == 0 then begin @definstall = File.exist?(Kakuto3::GETINISTR(@ini,"Dir","Hozon") + "jsclasses.zip"); rescue @definstall = false; end return true; end uri = URI.parse(@url); # if uri.scheme != "http" then # Log("httpでないとダメです."); # return false; # end # Kakuto3::ADDMESSAGE(hwnd,"\r\n\r\n♪jsclassesの情報取得開始♪\r\n"); # # response = nil; # Kakuto3::ADDMESSAGE(hwnd,uri.host + "に接続し情報を取得します.\r\n"); # # proxy = Kakuto3::GETINISTR(@ini,"Connect","Proxy"); # if proxy == "" then # proxydata = Kakuto3::GETIEPROXYINFO(); # if proxydata == nil || proxydata["server"] == "" then # proxy = nil; # proxyport = nil; # else # proxy = proxydata["server"]; # proxyport = proxydata["port"]; # end # else # proxyport = Kakuto3::GETINIINT(@ini,"Connect","Port"); # end; # Net::HTTP::Proxy(proxy,proxyport).start(uri.host){|http| # response = http.head(uri.path); # } # Log(uri.host + "に接続成功"); # if response == nil then # Kakuto3::ADDMESSAGE(hwnd,"情報取得に失敗.\r\n") # Log("情報取得に失敗.") # return false # end begin localtime = File.atime(Kakuto3::GETINISTR(@ini,"Dir","Hozon") + "jsclasses.zip"); @size = response['Content-Length'].to_i nettime = Time.parse(response['last-modified']) + 120 @definstall = (localtime < nettime) rescue @definstall = true end Log("jsclassesの情報取得終了") Kakuto3::ADDMESSAGE(hwnd,"完了\r\n") @success = true return true end def GetDownloadData(soft) if Kakuto3::GETINIINT(@ini,"Connect","UseNetwork") == 0 then return { "success" => true, "downnum" => 0, "dls" => []}; else return { "success" => @success, "downnum" => 1, "dls" => [{ "url" => @url, "file" => "jsclasses.zip", "size" => @size}]}; end end def IsDefaultInstall(soft) return @definstall end def Install(hwnd,soft) # 2007/08/03 W32TeXがptexディレクトリをなくす # dir = Kakuto3::GETINISTR(@ini,"Dir","Install") + "share\\texmf-local\\ptex\\platex\\jsclasses\\" dir = Kakuto3::GETINISTR(@ini,"Dir","Install") + "share\\texmf-local\\tex\\platex\\jsclasses\\" from = Kakuto3::GETINISTR(@ini,"Dir","Hozon") + "jsclasses.zip" Kakuto3::ADDMESSAGE(hwnd,"jsclassesのインストール……") if Kakuto3::ZIPDLG(hwnd,from,dir) then Kakuto3::ADDMESSAGE(hwnd,"成功\r\n") Log("jsclassesのインストールに成功") return true else Kakuto3::ADDMESSAGE(hwnd,"失敗\r\n") Log("jsclassesのインストールに失敗") return false end end private def Log(l) begin fp = File.open(@log,"a+") rescue return end fp.write(l + "\n"); fp.close() end end Jsclasses = JsclassesClass.new
考察
スクリプトを修正してから再度インストーラを実行するとインストーラはエラーを出さずに先に進めるはずです。私の想像ですが、この現象は接続しているプロバイダなどの環境に依存しているのではないかと思います。
ということで私の接続環境を書いておきます。
- Bフレッツマンションタイプ
- VDSL接続
- asahi-net
- WebCaster V100
- バッファローBBR-4HG
- WindowsXP Professional SP3
最近のコメント