ラベル yum の投稿を表示しています。 すべての投稿を表示
ラベル yum の投稿を表示しています。 すべての投稿を表示
2016年9月10日土曜日

tomcat7 を CentOS7 に入れる時のメモ

今更ながら、CentOS7tomcat7をインストールして確認するメモです。

Tomcat7のインストール

yumでそのまま入る。

yum update
yum install tomcat*
tomcat version
systemd start tomcat
systemd status tomcat
curl -v localhost:8080

起動しない場合は、JAVA_OPTSを設定する。

vi /etc/tomcat/tomcat.conf
# 以下を追加
JAVA_OPTS="-Xmx512m -XX:MaxPermSize=256m"

Javaのインストール(Tomcat7は、6以上ならOK)

JRE1.8は自動で入る。そのため、1.8でコンパイルしたものは、そのまま動く。

使いたいバージョンのJDKがある場合は指定して入れる。

yum install java-1.6.0-openjdk-devel
java -version
javac -version
# 必要に応じてalternativesで設定
systemd restart tomcat
curl -v localhost:8080

servletの動作確認

cat > HelloServlet.java << EOF
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloServlet extends HttpServlet {
    public void service(HttpServletRequest req,
        HttpServletResponse res)
        throws ServletException, IOException {

        PrintWriter out = res.getWriter();
        out.println("Hello World!");
        
    }
}
EOF

javac -classpath '/usr/share/tomcat/lib/*' HelloServlet.java 
mkdir -p /usr/share/tomcat/webapps/ROOT/WEB-INF/classes
cp HelloServlet.class /usr/share/tomcat/webapps/ROOT/WEB-INF/classes/.
cat > /usr/share/tomcat/webapps/ROOT/WEB-INF/web.xml <<EOF
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>HelloServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/HelloServlet</url-pattern>
    </servlet-mapping>
</web-app>
EOF
systemctl restart tomcat
curl -v localhost:8080/HelloServlet

Contextの設定と確認

cat > /etc/tomcat/Catalina/localhost/mycontext.xml <<EOF
<Context path="/mycontext" docBase="/tmp/mycontext" workDir="/tmp/mycontext/work" />
EOF

mkdir -p /tmp/mycontext/WEB-INF/classes
cp HelloServlet.class /tmp/mycontext/WEB-INF/classes/.
cp /usr/share/tomcat/webapps/ROOT/WEB-INF/web.xml /tmp/mycontext/WEB-INF/.
curl -v localhost:8080/mycontext/HelloServlet

firewallの設定をする

  • クラウドならば、Security Groupなどを設定
  • インスタンスのfirewallを開く(CentOS7はfirewalld)
  • 外部からアクセスできるようにする場合は注意

トラブルシューティング

500系エラー

  • ログを見て対処。
  • ClassNotFound系は、classファイルの設置場所が正しいか確認。

400系エラー

  • web.xmlの指定が正しいか確認。
  • web.xmlの設定が壊れている場合は、どこをたたいても400系エラーが出る。
2016年7月24日日曜日

Elixir 1.3.1 を CentOS で yum install

最新の Elixir を CentOS 6/7 にインストールしたい

ググるとソースからビルドするという記事が出てきます。

調べてみると、以下の状況。

  • CentOS6(EPEL)は、Elixir入ってない。
  • CentOS7(EPEL)は、Elixir入ってるが、0.12.5(ドキュメントほとんどないし、開発環境が違いすぎる)。
  • Fedoraは、Elixir入っているて、yumでインストールできる。
  • CentOS6/7でも、ソースからなら、問題なく入る。

Fedoraで動いていれば、rpmを作り直せば、そのまま使えそうなので、作りました。 コンテナもいいですが、手に馴染んだ環境にサクッとyum installで入るのは魅力的ですよね。

すぐに使ってみたい方は、こちら。Fedora公式RPMホスティングサービスのCOPRを使いました。

# CentOS7
$ curl -OL https://copr.fedorainfracloud.org/coprs/ynishi/elixir/repo/epel-7/ynishi-elixir-epel-7.repo
$ mv ynishi-elixir-epel-7.repo /etc/yum.repos.d/
# CentOS6
$ curl -L https://copr.fedorainfracloud.org/coprs/ynishi/elixir/repo/epel-6/ynishi-elixir-epel-6.repo
$ mv ynishi-elixir-epel-7.repo /etc/yum.repos.d/
$ sudo yum install elixir

COPRのプロジェクトページ

https://copr.fedorainfracloud.org/coprs/ynishi/elixir/

CentOS7ので、公式のElixirをとにかく触ってみたい(Phoenixもmixもいらない)という方はこちら。

$ sudo yum install epel-release
$ sudo yum install elixir

一応mixも入るのですが、最新のmixに用意されてるタスクとは随分違っていて、最低限の状態です。

CentOS7の場合

基本的なやり方はここと同じです。 http://qiita.com/bellflower2015/items/d33ca026b7d9c626adc9

rpmを作る一般的なやり方はこちら。

https://blog.tnmt.info/2011/04/29/rpmbuild-for-beginner/ https://osdn.jp/magazine/14/01/10/090000/

COPRというサービスは、RPMソースをアップして、サーバ上でRPMビルドして、できたRPMをホスティングしてくれますので、作業用インスタンスで、ビルド・インストールの確認をして、できたRPMソースをアップしました。

COPRについてはこちら。

http://qiita.com/hnakamur/items/336758b1d9564b759d49

コマンドはまとめて、Githubにあげました。build.shの通りでできるはずです。

https://github.com/ynishi/elixir-rpm

Erlangのインストール

まずは、Erlangを入れます。これは、Fedoraの最新版ソースからそのままリビルドできました。

ビルド中にメモリ使用量が最大で1GBくらいまで行きました。 メモリ500MBくらいの一番安いインスタンスだと厳しかったです。 ビルド時間は1時間弱くらいでした。(GCPの共有CPUインスタンスで)

 CXX  x86_64-redhat-linux-gnu/wxe_funcs.o
 g++: internal compiler error: Killed (program cc1plus)
 Please submit a full bug report,
 with preprocessed source if appropriate.
 See <http://bugzilla.redhat.com/bugzilla> for instructions.
 make[3]: *** [x86_64-redhat-linux-gnu/wxe_funcs.o] Error 4
 make[3]: Leaving directory `/home/YutakaNishimura/rpmbuild/BUILD/otp-OTP-18.3.4.1/lib/wx/c_src'
 make[2]: *** [opt] Error 2
 make[2]: Leaving directory `/home/YutakaNishimura/rpmbuild/BUILD/otp-OTP-18.3.4.1/lib/wx'
 make[1]: *** [opt] Error 2
 make[1]: Leaving directory `/home/YutakaNishimura/rpmbuild/BUILD/otp-OTP-18.3.4.1/lib'
 make: *** [libs] Error 2
 エラー: /var/tmp/rpm-tmp.X8FB4G の不正な終了ステータス (%build)


RPM ビルドのエラー:
    /var/tmp/rpm-tmp.X8FB4G の不正な終了ステータス (%build)

インスタンス上でビルドできることを確認したら、COPRにFedoraのRPMソースを指定して、ビルドします。

Elixir

これもFedoraの最新版をほぼそのまま使えました。

ただ、現行のElixirのgitリポジトリは、Erlangのビルドツール rebar のバイナリが含まれていて、単体でビルドできるようになっています。

ですので、Elixirのgitリポジトリのビルド方法を使うことにしました。

そうするとLOCALEがUTF8でないという警告が出るので、LOCALE指定も追加しました。

こちらは、オリジナルで作ったRPMソースをWeb上にアップロードして、それをCOPR に指定しました。

こちらは5分くらいでビルドできました。

COPRでは、ビルドするときのyum レポジトリを外部リポジトリとして設定することで、EPELにない、rpmを読み込みます。

最初、Erlang用のレポジトリを作って、Elixirのリポジトリから呼び出してましたが、Elixirのリポジトリにまとめて入れておけば、ビルドもインストールも簡単になるので、一つにまとめました。

Cent OS7は以上です。

Cent OS6 の場合

Erlang

CentOS6と、Fedora/CentOS7との最大の違いはsystemdです。(Erlangのrpm ビルドを考えると)

結局、specファイルでsystemdがないバージョンは回避するようになっていたのですが、いくつか修正が必要でした。

  • makeのオプションにベタ書きされていた
  • empdのサービスファイルが全てのバージョンで使われてた

あと、erlang, elixir のtar.gzソースファイルを自分で設置する必要がありました。 その辺りも、build.shに残しました。

また、依存関係のrpmは、CentOS7では、Fedoraの最新rpmソースからまとめてインストールしていたのですが、CentOS6では、systemdがないため、インストールできませんでした。

そのため、一旦EPELのErlangをインストールしてからビルドしましたが、いくつか手動でパッケージを追加しました。

上記対応をして、ビルドしたRPMソースをCentOS7の時と同様にCOPRでビルドしました。

Elixir

CentOS7とほぼ同じものでうまくできました。 ただ、testの際に、改めてLOCALEを設定しないと、テストが通らず、インストール完了しませんでした。

上記修正して、同じくCOPRにアップしました。

今後

今回、必要なファイルだけのリポジトリを切って作りましたが、RPMの本元のリポジトリからフォークして作成した方が、今後の保守性を考えると良いと思います。

また、COPRは、今回初めて知りましたが、カスタムRPMを作って配布するプラットフォームとしては、かなり良いと思いました。

簡単に使えて、プレーンな環境でビルドしなおしているので、一定の動作は保証できるためです。

パッケージをメンテナンスしている方のおかげで、さっくりと使えるRPMができました。