Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

Virtual BoxのNAT接続がうまくいかないので四苦八苦して解消

f:id:fa11enprince:20160409135557j:plain そもそもの発端はVagrantを使っていて、vagrant upしたときに
sshの設定でダメになりハマっていたところからでした。
こんなやつです。

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'vista-ie7'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: vista-ie7_default_1454528248664_66668
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
Timed out while waiting for the machine to boot. This means that
Vagrant was unable to communicate with the guest machine within
the configured ("config.vm.boot_timeout" value) time period.
 
If you look above, you should be able to see the error(s) that
Vagrant had when attempting to connect to the machine. These errors
are usually good hints as to what may be wrong.
 
If you're using a custom box, make sure that networking is properly
working and you're able to connect to the machine. It is a common
problem that networking isn't setup properly in these boxes.
Verify that authentication configurations are also setup properly,
as well.
 
If the box appears to be booting properly, you may want to increase
the timeout ("config.vm.boot_timeout") value.

よく見るエラーで、うーんわからんということで、
手動でVirtual Boxの環境を作るところからやってみました。
そしたらGuest OSからネットにつながらないじゃないですか。

なんでかNAT接続でVirtual Boxの上に構築したGuest OS(CentOS, Ubuntu)から
NAT接続で外につなげませんでした。
2週間くらい悩んでました。
前からネットワーク周りの設定をほかのソフトウェアがいじっていたせいか
不安定になっていました。
いろいろ調べましたが、Virtual BoxのつくるGuestとHostをつなぐネットワーク
10.0.2.2(Guest OSからみたときのHostのIPアドレス)とか
192.168.3.1(※これは環境による。Host側のデフォルトゲートウェイでGest側にDNSサーバーとして設定されるもの)
が物理的に見えないのでよくわからん…の状態でした。

現象

Guest OSのCentOSからping 8.8.8.8は通るのだけれどもping google.comは通りませんでした。
DNSを疑いましたが、/etc/resolve.confを自動で書き換えないように設定したのち、
/etc/resolve.confをGoogleのDNS 8.8.8.8にしても改善せず…。

環境

仮想ソフト: Virtual Box 5.1.22
Host OS: Windows 10 (1607)
Guest OS: CentOS 6.9 minimal
※別途VMWare Playerも入れてあります。

解決方法

私の環境での解決法は、VMWare Playerが入っていたので
Virtual Boxを両方アンインストールして
もう一度Virtual Boxをインストールしました。
他にもいろいろついでにソフトを消していましたが、おそらくこの2つが原因です。
なにかネットワーク設定が衝突していたのかもしれません…
アンインストールするとVMWare PlayerとVirtual Boxが作るネットワークは消えています。
そしてもう一度Virtual Boxで一からCentOS 6.9のminimalを入れます

その他起きたこと

再インストール後、なぜかChromeだけでネットに繋がりません。
ルータを再起動してもダメでした。
そしたらこのコマンド打ったら治りました。
Chromeが突然ネットに繋がらなくなくなった!そんな時の解決法はコレだ! | 電気通う

> netsh winsock reset

やはり……VMWare PlayerとVirtual Boxがなにかしていたのかな…。

作り直した結果

$ ping 8.8.8.8
=> 成功
$ ping google.com
=> 成功
$ curl http://www.yahoo.co.jp
=> 成功

MacでSAStrutsの環境構築とチュートリアルのセットアップ

f:id:fa11enprince:20170106160736j:plain SAStrutsのチュートリアルのセットアップ方法のMac版です。 過去記事はこちら

eclipseをインストールします

ダウンロードしてインストールします。 ちなみにMacだといろいろついているpleiades All in Oneはないので 普通にJava EE用のインストーラーを落としてください。 https://eclipse.org/downloads/
workspaceは ~/eclipse/jee-neon/Eclipse.app/Contents/Eclipse/workspace
とかのほうがいいです。場所はDocuments以外だとどこでもいいと思います。
DocumentsだとiCloud配下になってしまうので(Sierra以降) iCloudの配下にあると同期の関係でなぜかCleanしてもファイルが最新にならないという問題が置きます。 El CapitanまでならDocuments配下にworkspaceがあってもいいと思います。

Tomcatのインストール

homebrewの導入は簡単なので割愛します。
homebrewを使って以下のコマンドを実行します

$ brew install tomcat  

/usr/local/Cellar/tomcat/8.5.9
にインストールされます。

Super Agile Strutsチュートリアルをインポートします

ここからダウンロードします
http://sastruts.seasar.org/download.html

ダウンロードしたものをEclipseにインポートします
まずはファイルを解凍してそれをインポートします。
File > import > General > projects from Folder or Archive

Seasar2のプラグインを入れておきます。

Help > Install New Software > add
Name : Seasar Plugin 3.3
Location: http://eclipse.seasar.org/updates/3.3/
チェックするのはDolteng, ResourceSynchronizer, SAStrutsPluginだけです。

An error occurred while collecting items to be installed
session context was:
が出たら
http://stackoverflow.com/questions/14866656/can-not-install-android-adt-21-1-on-eclipse-juno-windows-7-after-upadate-to-sd/14896322#14896322
を参考に一番下のチェックConcat all update sites during install to find required softwareを外します。

Tomcatプラグインを最新のものをいれる

Market Placeより
Eclipse Tomcat Plugin 9.1.2をいれる

プロジェクトを動的モジュールに変換します

プロジェクトを右クリック Configure(構成) > Convert to Faceted form ...
Dynamic Web Module(動的Webモジュール)に
これでSeasar2のコンパイルが通るはず

サーバの作成

サーバービューから新規作成
Apache > Tomcat 8.5
を選ぶ
Tomcat installation directoryに下記PATHを貼り付け

/usr/local/Cellar/tomcat/8.5.9/libexec

そのあと、
sa-struts-tutorialのwarを追加します。 ※インストールしたパスを忘れてしまった場合は brew info tomcat でわかります。最後にlibexecをつけましょう。 ちなみにですがこのパス/usr/localはFinderだとCtrl+Shift+Gじゃないとアクセス出来ないと思いますので。。。

もう一度プロジェクトを右クリック

右クリック > Properties(プロパティ) > Project Facets(プロジェクトファセット)
Dynamic Web Module(動的Webモジュール) > 右側のRuntimeで
Apache Tomcat v8.5をチェック

デプロイメントアセンブリーの変更

また、プロジェクトを右クリック > Properties(プロパティー)で
Deployment Assembly(デプロイメント・アセンブリー)を選択します。
/WebContent /というのがあるので除去します。

追加ボタンよりフォルダーを選択します。
/src/main/webapp でデプロイ先を / にします。

サーバーを起動します

サーバービューの右クリックから起動して
ブラウザから
http://localhost:8080/sa-struts-tutorial/
にアクセスできればOKです。

ちなみにhttp://localost:8080/ にアクセスすると404になりますが、気にしないでください。
https://teratail.com/questions/11096 基本的にここまででOKです。

動かしたときにrequestのログが出ないようにします

ここは追加です。 web.xmlのrequestDumpFilterに次のを追加します。

    <filter>
        <filter-name>requestDumpFilter</filter-name>
        <filter-class>org.seasar.extension.filter.RequestDumpFilter</filter-class>
        <init-param>
            <param-name>beforeContextAttribute</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>afterContextAttribute</param-name>
            <param-value>false</param-value>
        </init-param>
    </filter>

init-paramを2つ追加します。

猫マークからTomcatを起動したい&Tomcatプロジェクトのほうが何かと便利って場合

追加で設定をします。
eclipseのサーバービューだと何かと不便があるので、次のように追加で設定します。

これをするとEclipseの上側にある猫マークでTomcatを起動できます。 環境設定から

Tomcatバージョン:  
Tomcat version 8.x
Tomcat Home:  
/usr/local/Cellar/tomcat/8.5.9/libexec

Applyを押します。
次にプロジェクトの設定をします。

プロジェクト右クリック  
Properties >Tomcat  
Tomcatプロジェクトにチェック  
コンテキスト名: sa-struts-tutorial  
Webアプリケーションルートとするサブディレクトリ:  
/src/main/webapp

Applyを押して終了です。 この場合猫マークが使えます。

MacのEclipseでMarket Placeが使えない[解決済み]

f:id:fa11enprince:20160417051906j:plain 自分のmacOS SierraでEclipseのMarket PlaceからEclipse Tomcat Plugin 9.1.2をいれようとするとエラーが発生したのでその時のメモです。
根本的な解決は行えませんでしたが、一応JavaとEclipseを入れ直すことで解消しました。
元々の環境はEclipse Mars.2, jdk 1.8.0_51でした。

その時の備忘録です。 同じ問題にはまっている人が多そうなのでメモとして書いておきます。
一番お手軽な解決策はJavaとEclipseをほぼ完全消去
(ほぼ、というのは完全に消しされていないものがあるような気がするからです)した上で、
JavaとEclipseをいれなおせばOKです。

これは想像なのですが、おそらく
${JAVA_HOME}/jre/lib/security/cacerts
にあるJava CAがなぜか壊れていたのだと思います。

Stackoverflowで類似の質問がめちゃくちゃありましたがどれも解決に至らず。

以下長々とした記録です。

エラー発生

日本語

http://tomcatplugin.sf.net/update/site.xml のリポジトリーを読み取ることができません。  
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target  

英語

Unable to read repository at http://tomcatplugin.sf.net/update/site.xml.  
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target  

http://tomcatplugin.sf.net/update/site.xml のリポジトリーを読み取ることができません。
のエラーが出た

試したこと

「直接」から「ネイティブ」に変更

効果なし

Javaにサーバ証明書を入れる

効果なし

まずFirefoxなどでhttp://tomcatplugin.sf.net/update/site.xmlにアクセスします。
たぶんsource.forgenetに飛ばされます。
ブラウザで保護された通信から証明書を表示します。

GeoTrust Global CA  
  名前忘れたけどここに中間証明書  
    *.sourceforge.net  

Firefoxならブラウザ上からかきだせます
知識不足でルートの方を追加すればいいのかルートじゃない方を追加すればいいのかわからず
結局全部入れました。
全部デスクトップに書き出します。

JAVA_HOMEが設定されていないと不便なので設定します
僕の場合はjdk.1.8.51でした。
ここはWindowsとだいぶ違うところです。/usr/libexec/java_homeというJavaのバージョンを管理してくれているツールがあります。

$ vi ~/.bashrc  
export JAVA_HOME=`/usr/libexec/java_home`  
$ bash  
$ echo ${JAVA_HOME}  
/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home  

そのあと

$ ls ${JAVA_HOME}/jre/lib/security/cacerts  
/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/security/cacerts  

となっていることを確認して、

$ sudo keytool -import -trustcacerts -file ~/Desktop/GeoTrust\ Global\ CA.cer -keystore ${JAVA_HOME}/jre/lib/security/cacerts -alias ca -storepass "changeit"  
証明書は、別名<geotrustglobalca>のキーストアにすでに存在します  
追加しますか。[いいえ]:  y  
証明書がキーストアに追加されました  

あれ?すでにあるんかい…と思いながら続行
ちなみにchangeitがデフォルトのキーストアのパスワードです。
ここでMarket Placeにつなぐも同様のエラー

$ sudo keytool -import -trustcacerts -file ~/Downloads/sourceforge.net.crt -keystore ${JAVA_HOME}/jre/lib/security/cacerts -alias sourceforge -storepass "changeit"  
この証明書を信頼しますか。 [いいえ]:  y  
証明書がキーストアに追加されました  

ここでMarket Placeにつなぐも同様のエラー

よくわかってないので中間証明書も入れておきました

sudo keytool -import -trustcacerts -file ~/Downloads/GeoTrustSSLCA-G3.crt -keystore ${JAVA_HOME}/jre/lib/security/cacerts -alias geotrustsslca -storepass "changeit"  

ここでMarket Placeにつなぐも同様のエラー

一応確認して見るも…ちゃんと登録されてる

$ keytool -v -list -keystore ${JAVA_HOME}/jre/lib/security/cacerts | less  

eclipse.iniに設定を追加

-Djavax.net.ssl.trustStore=/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/security/cacerts  
-Djavax.net.ssl.trustStorePassword=changeit   

2行を追加しました。
効果はありませんでした。

Eclipseのネットワーク設定をいじくる

効果なし
直接になっているものをマニュアルやネイティブに変える

以前SOCKSで似たような問題が出たが、消すことで解消したが、消せない
→これはproxy環境下の話で、現在のバージョンではsocksに情報を入力しなければいいそうな。

Eclipseの利用可能なサイトの一覧をいじくる

効果なし

前準備として一覧を消しておく。

$ /Applications/Eclipse.app/Contents/Eclipse/p2/org.eclipse.equinox.p2.repository  
rm -rf cache/*  

Eclipseを立ち上げ直して
インストール/更新から
利用可能なサイト
http://tomcatplugin.sf.net/update/
を追加
これを選んで際ロード
→エラー

解決しないので最新版のEclipseを入れ直す

Eclipse MarsからEclipse neon 2に
→効果なし

たまにEclipseのコンソールに設定した覚えのないproxyの除外設定が出る。

効果なし
Macのネットワーク設定を見るとproxyがおかしい
システム環境設定 > ネットワーク > プロクシタブ > プロキシ設定を使用しないホストとドメイン
*.local, 169.254/16
と書かれているので消す。
これ自体は何の影響もなかった
これ自体はMacの不具合として書き込みが多数あった。

JavaとEclipseを完全消去して入れ直す。

治りました!!
Eclipseはデフォルトの状態なら$HOME/eclipseにあると思うのでフォルダごと削除
JavaについてはOracleの公式の説明があるんだけど、なんか足りない気がする…ので
http://www.toraneco.com/blog2/?p=1795
を参照。

$ sudo rm -rf /Library/Internet Plug-Ins/JavaAppletPlugin.plugin  
$ sudo rm -rf /Library/LaunchAgents/com.oracle.java.Java-Updater.plist  
Password:  
$ sudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPane  
$ sudo rm -rf /System/Library/Java/Support/CoreDeploy.bundle  
rm: cannot remove ‘/System/Library/Java/Support/CoreDeploy.bundle/Contents/Download Java Components.app/Contents/_CodeSignature/CodeResources’: Operation not permitted  
以下opreration not permittedのエラーが続く...  
$ sudo rm -rf ~/Library/Preferences/com.apple.java.util.prefs.plist  
$ sudo rm -rf ~/Library/Preferences/com.apple.java.util.prefs.plist.lockfile  
$ sudo rm -rf /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk  

エラーでたけど気にしない・・・
最新のJDKを入れる(最新じゃなくて同じバージョンでもよかったかもしれない)
最新のEclispeをインストールし直す。

無事つなぐことができました。
もし根本的な理由がわかる人がいましたらお知らせいただけると幸いです。

参考

http://stackoverflow.com/questions/7625943/unable-to-read-repository-at-http-download-eclipse-org-releases-indigo
http://qiita.com/nenokido2000/items/b36b6e5f0854d7d63ba6
http://www.toraneco.com/blog2/?p=1795

Apatana StudioをmacOS Sierraで使う

f:id:fa11enprince:20170113021038j:plain Aptana Studio 3をmacOS Sierraで立ち上げようとすると終了してしまいます。 Aptana Studioが予期しない理由で終了しました。」と強制終了します。
Sierraではデフォルトではセキュリティの理由で「すべてのアプリケーションを許可」を選べなくなっています。

「全てのアプリケーションを許可」解除

そこでまずターミナルを立ち上げて次を実行します。

$ sudo spctl --master-disable
Password:

パスワードを聞かれるのでパスワードを入力します。
そうすると、「全てのアプリケーションを許可」を選べるようになります。

システム環境設定

システム環境設定 > セキュリティとプライバシー > 一般タブ
ダウンロードしたアプリケーションの実行許可
すべてのアプリケーションを許可
このあと、Aptana Stdioのdmgファイルを再度インストールして実行すれば動きま...せん。

JDK最新版を入れる

Java SE 6が必要と起動時に言われた場合は
OracleからJDKの最新版(Java8)を入れてください。
起動すると、

The JVM shared library "/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/bin/../jre/lib/server/libjvm.dylib"
does not contain the JNI_CreateJavaVM symbol.

と出ます。

JavaForOSXを入れる。

http://support.apple.com/kb/DL1572?viewlocale=en_US&locale=en_US
んでここでJavaForOSXをダウンロードしてインストールします。

これでようやく使えるようになりますorz

ところでFinderからDocuments(書類)フォルダが見えないのはなんでだろう。。。 terminalからは見れるのに。 と思ったら、
http://applech2.com/archives/20160808-macos-sierra-icloud-drive.html
に書いてあるようにどうもSierraからiCloudの同期対象になったようでiCloudからは見られる模様。
Desktopもそうみたい。。。

参考情報

http://stackoverflow.com/questions/39664926/aptana-crashes-on-mac-os-sierra http://stackoverflow.com/questions/25914757/osx-yosemite-jvm-shared-library-does-not-contain-the-jni-createjavavm-symbol http://apple.stackexchange.com/questions/247127/documents-folder-not-visible-in-finder-on-macos