カテゴリー: Tomcat

新・僕とOpenCmsの千年戦争(`・ω・´)

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


WordPressの移行手順は分かったので、OpenCmsに取り掛かる。
色々と忘れていて時間がかかった(ノ∀`)


VirtualBox上のubuntu serverに入れる為にまずTaskselでTomcat7を入れた。
それでOpenCms9.53を入れた。何回かやり直しで入れたが、インストール途中でたまに止まる場合があった。
途中で出て来る警告通りにmysqlのmax_allowed_packetを32Mに指定したら上手く行くようになった気がする。
気の所為かもしれないが。

9.53のインストール後のページは8.52とはなんか違っていて、柔らかい感じというかウェブウェブしていた。
エディター向けのチュートリアルを試したが、まあ操作自体はそんなに変わっていないようだった。
PC以外のデバイスの表示にも対応したからか、各デバイス画面での表示が見られるようになっていた。

ほいでまあ本番環境からエクスポートして来たデータをインポートしようとすると…
 
 
OutOfMemoryErrorだったかなんだかが出てインポート出来ない…_| ̄|○

取り敢えずTomcatのHeapのサイズを256MBにしたらインポート出来た。
Tomcat起動時のJava仮想マシンのパフォーマンスチューニング
ここでふと、そういえばOpenCmsの推奨だか必要メモリって512MBだったような…
VPSで512MBプランだとさすがにアレかもしれないなと思い始める(´・ω・`) セメテ1GBプラン?

インポート出来たので、意気揚々とページにアクセスしたが、表示がおかしい_| ̄|○
いや、表示がおかしいどころか内容が表示されない。表示されるのはヘッダー部分か?

バージョン違いの問題かと思い、最初に8.52を入れてデータをインポートをし、
その後、9.53へのアップデートを試みる。特に問題もなくアップデート成功(`・ω・´) コレデカツル

再び意気揚々とページにアクセスすると無事に表示された(`・ω・´) ワイハカッタンヤ
そしてそこからデータをエクスポートし、新規インストールした9.53の環境にインポートし
ページにアクセス!
 
 
 
 
何故だ…_| ̄|○

前と同じように表示されない…… 9.53にアップデートした時にコンテント周りも9.53用に
アップデートされるんじゃないのか…

それでまぁ色々と中を見ていて気づく。

( ゚Д゚)ハッ これ、9.53ってv8モジュールを含んでいねぇヽ(`Д´)ノ

そりゃあまともに表示されんわ(ノ∀`)


ということで、選択肢は3つくらい。

  1. 9.53を入れて、v8のモジュールを手作業でインポートする。
  2. 8.52を入れて9.53にアップデートしたものにデータをインポートする。
  3. 全てを書き直し。

1は面倒くさい。2は調査でやったこととほぼ同じなので良し。3はいずれはしないと駄目だが、
今一気にやるのはちょっと難しい…

だからまあ、2でコンテントの表示を維持しつつ、9.53以降の物を勉強しながら少しずつ
書き換えていくしかないかな?


あとはURL絡みの実験をしなくてはいけないけど、ローカル環境でDNS設定とかするのは
ちと面倒な気がするから、これは移行直前に本番環境でやろうかなぁ。12.02と14.04で
大きく変化はしてないだろうし。

あと考えるべきことは512MBにするか1GBにするか……やはり512MBはさすがにきついか。

もう一つ考えないといけないのは移行時期。今の契約は6/30までだから5月くらいに
新環境を借りて構築すればちょうどいいのかな。でもその頃だと16.04も出てるんだよなぁw
まあその辺はその時考えるかな(・∀・)

僕とOpenCmsの千年戦争(`・ω・´)-12

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩



前回のパスワードリセットからずっとOpenCmsを完全に放置していたのかと言えば、
そういうこともなくモンハン3Gや翻訳の片手間にアップグレード作業の検証を
しようとはしていた。

していたものの続々と追加されるクエストをこなしたり、VirtualBox上で環境を
再構築するのが面倒くさくてだらだらしている内に日々が過ぎていった…( ・´ω・`)

それでも何とか環境を整えた。そしてさくらVPS上のubuntuからデータをexportし、
VirtualBox上のubuntuにimportした。作業自体はそれほど問題もなく完了。
さて、アップグレードをする前にちゃんと表示されるかなとページをクリック。

The function must be
おや( ´・ω・)?
 


The function length must be used with a prefix when a default namespace is not specified

「デフォルトネームスペースが指定されていない時はlength機能は
プリフィックスを伴って使用されなければなりません」(´・ω・`)?

なんか意味がわからんのぅと思いつつ、ぐぐる。ドンピシャのページはヒットせず、

The function xxxxx must be used with a prefix when a default namespace is not specified

とxxxxx部分が異なるページがチラホラ。英語ばっかりなので読むのが面倒くさい(´・ω・`)

取り敢えずエラーが出てるmain.jspの37行目を見ると以下のような条件文…

<c:if test="${shtype.length() >0}">

これは自分で作ったモジュールではあるけれども、VPS上では別に問題はなかった。
ここで「そういえばVirtualBox上のTomcatは6でVPS上では7だな。」とは
思ったものの、「まあバージョンの違いでこんな文がエラー原因になる
わけないよねぇ(・∀・)」と違いを念頭に置きつつもスルーしてしまった。
アップグレードが面倒くさかったからである(ノ∀`)
 


まあ何はともあれ、エラーメッセージ自体はxxxxx部分以外は定型であり、
xxxxx部分はその時記述されているfunction名であるということはわかった。
エラーメッセージの内容から取れる解決策はネームスペースの設定が出来て
いない原因を探し出して設定する又はプリフィックスをつけることで
あろうと考えたが、後者は何か美しくないと思い、前者の方法をぐぐった。

importが上手く行ってないのかとぐぐってみたが似たような事象はなく…
色々とぐぐってみたが解決策は見つからない…
仕方がないので俺氏はナバルデウス討伐へと赴いた(`・ω・´)


そしてナバルデウス討伐にも数度失敗し、素材集めに飽きて数日後に
再び戻って来た時に頭を過ったのは、やはりTomcatのバージョン違い。

「Tomcatのアップグレードってやったことないから面倒くさいんかのぅ(´・ω・`)
やり方調べるのも面倒くさいのぅ…」とまだまだ抵抗を示しながら、エラーメッセージで
ぐぐったけれども全ての内容を読んでなかったページを眺める…

The problem with your code is that the code run locally is run on Tomcat 7 and the code run on the server is run on Tomcat 6.
As soon as invocation of methods with parameters (those ()) is the feature of EL 2.2 (and higher) and it is accompanied by Servlet 3.0 compatible containers (thus Tomcat 7) your code runs fine locally.
As soon as this code is run on a Servlet 2.5 container (thus Tomcat 6) you get the mentioned error.

jsp – The function getMessageData must be used with a prefix when a default namespace is not specified – Stack Overflow

(||゚Д゚)ヒィィィ!
やっぱバージョン違いっぽい。Servlet3.0互換のコンテナであるTomcat7では
パラメータ(“()”のこと?)付きのメソッド呼び出しが可能なEL2.2をサポート
してるけど、Servlet2.5コンテナの6だとエラーになるでみたいなことが
書いてあるし…_| ̄|○


ということでTomcat7にアップグレードした。やり方をぐぐったけれども、
新規インストールの方法を説明しているページばかりだったので適当に

sudo aptitude install tomcat7

したw

tomcat7upgrade01
「以下のアクションはこれらの依存解決しまっせ – 以下のパッケージを除去しまっせ」ということなので”y”。

tomcat7upgrade02
インストール、リムーブされるパッケージが表示されるので”y”。

でまぁアップグレード後にopencms8.5.2を入れ直す。
インストールを仕掛けておいてそのまま忘れて、インストールし直しを数回やる(ノ∀`)


そしてまたモジュールとコンテントのインポート作業を行って再びアクセス。
result

キタ━━ヽ( ゚∀゚)ノ━━ !!!!!


というわけで今回もまた何かをした気になっているが、実はただ単に検証環境に
本番環境のデータをインポートしただけで力尽きたという落ちに(ノ∀`)

エクスポート・インポート手順は他のエントリで書こう…疲れた (ヽ’ω`)

そもそもこれはOpenCms絡みの話と言うよりもTomcat絡みの話だなぁと
思ったり思わなかったリ。

僕とOpenCmsの千年戦争(`・ω・´)-2

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩



前エントリ時ではスクラッチでがんばるべきかと思っていたが、結局、
template3というかv8系モジュールはそのまま流用する方が賢いという結論に(ノ∀`)

でまぁ、そのまま作り始めれば良かったのだけれども、邪魔臭い/opencms/opencms/を
URLから除去する方法等をだらだら試していたりして2週間近くもかかった。

※2013/10/11追記
この方法だと画像が表示されない?多少、設定を変えて下の二行を
コメント化すると画像が表示され、Systemへのlogin、その他の作業が
行えるようになるがセキュリティ等で問題がないかは不明。
詳しくは僕とOpenCmsの千年戦争(`・ω・´)-9参照。

RewriteCond %{REQUEST_URI}        ^/opencms/resources/.*$
RewriteRule ^/opencms/(.*)$       /$1 [PT]

OpenCmsはvfsとかいう仮想ファイルシステムを採用しているらしく、初回時や
export(実ファイルとしてストレージに出力?)が許可されていないページを
データベースから読み出して動的生成してるとかどうとかこうとかでURL絡みが面倒な模様。

それでも以下のような
mod_proxyを利用した方法(1)と
tomcatにポート80を監視させてUrlRewriteFilterを使う方法(2,3)
がある模様。

  1. Avoiding /opencms/opencms in the URL (apache + mod proxy)
  2. Removing the /opencms/opencms prefix without using Apache
  3. OpenCms 8: avoiding “opencms/opencms” in URL

うちは今のところwordpressの為にあぱっちぇを入れてポート80を使用している為、
1の方法しかない。tomcat上で動くblogに乗り換えてもいいんだけども、
今は一ヶ月以上もどうでもいいことに時間を費やしてるので追加の面倒事を
抱え込みたくないのでパス(・∀・)

この時ふと思ったがtomcatがポート80で全てのリクエストを受け取って
自分宛ではないものをあぱっちぇに送る、つまりはproxy_ajpの逆?のような
動きをする機能はないんだろうか(´・ω・`)
アプリケーション・サーバがそんな動きをしたらセキュリティ的に
駄目ということだろうか。


でまぁ1の方法を試してみるもログインまでは出来るがアイコンが表示されず、
まともに動かない(´・ω・`) 以前設定していたproxy_ajp.conf内の設定の
問題かと思ったけれども、どうも違うような…

そもそもこの方法って/opencms/opencms/を避けるとあるけど、別に管理モードでも
使えるとは言ってないからそういうことなんだろうか、或いはなんか設定ミスしてるのか
と悩んでいて、そんなことよりでかい問題に気づいた

この設定をそのままやるとwordpress、つまりはこのブログが表示されない…Σ(゚∀゚;)


ここまでは実は本番環境で実験するという阿呆なことをしていたので、
ここからVirtualBoxの仮想環境で試そうとする。

なんか上手く行かない…_| ̄|○
BIND入れてないのがいけないのかと入れたり設定したけども
なんか上手く行かない__o_

何日か浪費したので、顔を腫らし鼻血を流しながら
「今日のところはこれで勘弁しといてやるぜ(つД`)」と捨て台詞を吐いて諦めた。

いつの日か、倒してやる・゚・(つД`)・゚・


「/opencms/opencmsっていう長いURLも意外とお洒落で良いかもしれない(・∀・)」と
現実と折り合いをつけながら再び本番環境で1の方法を試すことに。
これで駄目ならもうしょうがない。

色々と試したりぐぐったりしてやっぱり駄目かと諦めかけたがふと思いつく。

<sites>
 <workplace-server>http://www.example.com</workplace-server>
 <default-uri>/</default-uri>
 <site server="http://www.example.com" uri="/sites/default/" />
</sites>
<Connector port="8081"
 maxHttpHeaderSize="8192"
 maxThreads="150"
 minSpareThreads="25"
 maxSpareThreads="75"
 enableLookups="false"
 redirectPort="8443"
 acceptCount="100"
 proxyName="www.example.com"
 proxyPort="80"
 useBodyEncodingForURI="true"
 connectionTimeout="20000"
 disableUploadTimeout="true"
 emptySessionPath="true" />
RedirectPermanent /opencms/opencms/ http://www.example.com/

「このhttp://www.example.com/の部分が
例えばhttp://hoge.www.example.com/なら( ・´ω・`)?」


挙動を完全に把握していないけれども取り敢えずやってみようと
なんか方法がないか調べる。

もうこの作業をやってから数日立っているので細かいことは忘れたが(ノ∀`)、
先のBINDの死闘からなんとなくネームサーバでサブドメインを指定すればいいと
思い、さくらの会員メニューを見る。

ドメイン管理もさくらでやっているからか元々VPSにくっついてるのか
わからないが5ドメインまで無料で使えるようだ(・∀・)


追加してCNAMEの設定をして
ブログアクセス→成功 ∩( ・ω・)∩ ばんじゃーい
OpenCmsアクセス→成功 ∩( ・ω・)∩ ばんじゃーい
OpenCms管理画面アクセス→失敗 (⊃・ω・)⊃ ばんじゃーい なしよ

つまりブログもOpenCmsの内容は閲覧出来るが、管理画面にログイン出来ても
まともに動かないという……ぐぬぬ( ;・´ω・`)

ここで俺氏力業を閃いた(・∀・)ピコーンッ! 
 
 
 
この3ファイルのデフォルトバージョンと書き換えバージョンを用意して
管理画面をいじる時は前者、そうでない時は後者に書き換えればええんや(・∀・)

なんか間抜けだけどね(ノ∀`)
もっと良い方法があるかもしれないけど、取り敢えずはこれでいいかと。
試してないのでわからないけど、Sitemap editorが動くなら
管理画面に入る必要はあんまりないし。個人ユースならモジュールをいじるくらいかな。


最終的には手順には全く関係なかったけど、メモ書き。

ポート80で試していた時だったか忘れたけど、OpenCmsの管理画面にもログイン出来ない状態があった。
これはtomcat6と違ってtomcat7はemptySessionPathが機能しないからcontext.xmlで
contextタグにsessionCookiePath=”/”属性を追加しなくちゃいけないというお話らしい。

Tomcat 7 session cookie path

これを追加した後はログイン出来たけど、やっぱりパスが違うらしくて使えなかったけど(ノ∀`)


余計なことを気にするとはまるというお話でした(´・ω・`)

Tomcatって雄猫って意味なんだね(・∀・) ニャー (2)

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩



本番環境へのTomcatのインストール

途中でハマってしまい、最初の頃何をやったか余り覚えていない(“・ω・゙)テヘペロ
ちょうど眠気が絶頂だったせいもある。

最初はHow to Install Apache Tomcat on Ubuntu 12.04を参考にしようとして

適当に

sudo apt-get install tomcat7

した。その次の作業がwgetでなんでそんな面倒なことせにゃならんのやヽ(`Д´)ノと

sudo apt-get update
sudo apt-get upgrade

したら、うまくインストールが終了したように見えたんだったけかな?

でも何故か繋がらない(´・ω・`)
Tomcat7だからいけないのかと思って

sudo apt-get remove tomcat7

で一旦削除したんだっけかな?

それでTomcatを確実に入れたいけど、コマンドだとよく分からんと思ってた所で
Ubuntu で Tomcat バージョン 7 のインストールとテスト実行

※ sudo tasksel でも良い。tasksel に慣れている人はそちら。

と書いてあるのを見つけてtaskselでTomcatを入れた。

でもやっぱり繋がらない(´・ω・`)
そして色々と試した結果、ふと気づく。

iptablesで弾いてるからじゃね( ;・´ω・`)ゴクリッ


すっかりiptablesのことを忘れきっていたので、色々とぐぐるがよく分からない(ノ∀`)
iptablesの内容を書き込んでるファイルが発見できない。意識が飛びつつも頑張った(´-ω-`)

iptablesってどうなってんの???というページの
1番目にあった/etc/network/if-pre-up.d/ではなかった。

とすると二番目のスクリプトで設定を読み込んでる( -`ω-´)?
でもその設定の場所が分からないのでどうしようもない。

右往左往した末に昔のエントリ内に参考したページがあるんじゃなかろうかと思い、
自ブログ内を”iptables”で検索した。幾つかヒットした内の1件に参考にしたページへの
リンクがあった(・∀・)

設定はこのページで紹介されている通り/etc/iptables.up.rulesを呼び出してた。

-A INPUT -p tcp --dport 8080 -j ACCEPT 

を付け加えて再起動したら、繋がるようになった(・∀・)


でまあapache連携などを試してうまく行ったのだが、なんとなくTomcat7にしておいた方が
いいかと思い立つ。今考えてみるとこの時既にTomcat7だったんだはないかと思わないこと
も無いが記憶が定かではない。

適当にインストールとアンインストールを繰り返していたらなんか変な状態に(´・ω・`)
インストールがなんか上手く行かないのでupgradeをしようとしても
「未解決の依存関係です。」みたいなメッセージが出て終わってしまう。

強制removeなどを試したものの状況は変わらない…_| ̄|○

ぐぐる。
Debianで未解決の依存関係でインストールできない場合の対処方法
Debian(Ubuntu) apt-get upgrade の「E: 未解決の依存関係です。」ではまったら

最終的に

sudo aptitude install tomcat7

で上手く行った……ような…(“・ω・゙)


雄猫と戯れると大変 (ヽ’ω`)
 
 
 
 
 
 
でも正直今回遭遇したトラブルのほとんどは説明をよく読んでやったら
回避出来たんじゃねと思わぬこともない俺氏であった( ・`ω・´)

作業よりも失敗とリカバリの工程を書くほうが時間がかかってるような気がするが、
それは何故だろうか (ヽ’ω`)

何はともあれようやっとOpenCmsを入れられる状態になったヽ( ・∀・)ノ