年: 2013年

  • OpenGrokのインストール

    OpenGrokのインストールをします。目的は,Lhazソースコードのブラウジングです。シンボルや関数の定義位置にクリックひとつでジャンプできたり,参照箇所をサーチできたり,たいへん便利です。ソースコードを眺めていると,ムラムラとリファクタリングしたくなってきます。

    必要な物件をインストールします。

    $ sudo apt-get install openjdk-7-jdk
    $ sudo apt-get install ant
    $ sudo apt-get install jflex
    $ sudo apt-get install ctags
    $ sudo apt-get install tomcat7

    OpenGrok本体をビルドします。

    $ wget http://java.net/projects/opengrok/downloads/download/opengrok-0.11.1-src.tar.gz
    $ tar zxf opengrok-0.11.1-src.tar.gz
    $ cd opengrok-0.11.1-src/lib
    $ ln -snf /usr/share/java/JFlex-1.4.3.jar JFlex.jar
    $ cd ..
    $ vi OpenGrok
    
    FindJavaHome() で /usr/lib/jvm/java-7-openjdk-amd64 を検索するようにします。
    
    $ ant
    
    ...(略)...
    BUILD SUCCESSFUL
    Total time: 3 seconds
    

    deployします。

    $ vi OpenGrok
    
    FindApplicationServerType() と DetermineWarDirectoryTomcat() で, /var/lib/tomcat7/webapps を見に行くようにします。
    
    $ sudo ./OpenGrok deploy
    

    tomca7を再起動します。

    $ sudo ./etc/init.d/tomcat7 restart
    

    動作確認します。

    $ curl localhost:8080/source/
    
    < ?xml version="1.0" encoding="UTF-8"?>
    < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    ...(略)...
    

    リバースプロキシとつなぎます。

    $ sudo vi /etc/apache2/sites-available/my_site
    
    (追加分のみ)
    <VirtualHost *:80>
            ServerName source.chitora.com
    
            ProxyRequests Off
            ProxyVia Off
            ProxyPreserveHost On
    
            <Proxy *>
                    Order deny,allow
                    Allow from all
            </Proxy>
    
            ProxyPass / http://127.0.0.1:8080/
    </VirtualHost>
    
    $ sudo /etc/init.d/apache2 restart
    

    閲覧用のソースを準備します。

    $ sudo mkdir -p /var/opengrok/src/Lhaz
    $ cd /var/opengrok/src/Lhaz
    $ sudo git clone ssh://chitora@127.0.0.1:29418/lhaz.git
    (以下ごにょごにょclone)
    

    /etc/cron.daily にインデックス作成のスクリプトを置いておしまい。

  • liboauthのインストール

    新サーバーで,Gerritのマージをツイートする仕組みが動いていませんでした。

    こんなやつです。Lhazユーザーの方には,「開発がんばってるね」と思って頂けるのではないかと。普通のフォロワーさんには,たまに量が多くてうざったいかもしれませんが……

    まず,liboauthをインストールします。

    $ tar xvf liboauth-1.0.1.tar.gz
    $ cd liboauth-1.0.1/
    $ ./configure
    $ make
    $ sudo make install

    自作のコマンドラインツイートツールをビルドします。

    $ cd ~/twt
    $ make
    $ sudo cp -vf twt /usr/local/bin/.

    動作確認します。

    $ twt 'command line de tweet'

    OKでした。

    Gerritの方の設定は,開発をつぶやくを見てください。

     

  • Doxygenのインストール

    Doxygenで,Lhazのソースコードからドキュメントを生成します。

    まず,インストールです。

    $ sudo apt-get install doxygen

    doxyfile を作成します。Webコンテンツ向けに,/var/www にLhazのソースを git clone / pullしているので,/var/www に doxyfile を作成します。

    $ cd /var/www
    $ sudo doxygen -g doxyfile
    

    ドキュメントの出力先ディレクトリを作成します。

    $ cd public_html
    $ sudo mkdir doxtgen
    

    doxyfileを編集します。

    $ cd /var/www
    $ sudo vi doxyfile
    
    (変更部分)
    PROJECT_NAME           = Lhaz
    OUTPUT_DIRECTORY       = /var/www/public_html/doxygen
    OUTPUT_LANGUAGE        = Japanese
    INPUT                  = /var/www/lhaz
    INPUT_ENCODING         = SHIFT_JIS
    などです。
    

    /etc/cron.daily にドキュメント生成スクリプトを作成します。

    $ sudo vi /etc/cron.daily/doxygen
    
    #!/bin/sh
    cd /var/www
    doxygen doxyfile
    
    $ sudo chmod +x /etc/cron.daily/doxygen
    

    動作確認です。

    $ sudo /etc/cron.daily/doxygen
    $ curl http://192.168.1.7/doxygen/html/
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=9"/>
    <meta name="generator" content="Doxygen 1.8.3.1"/>
    <title>Lhaz: メインページ</title>
    ...略...
    

    無事ドキュメントが生成されました。

  • WordPressの移行

    ブログも移行します。BackWPupプラグインで毎日バックアップしているファイルを利用します。

    MySQLデータベースのユーザー(wordpress)を作成します。

    $ mysql -u root -p
    mysql> create user 'wordpress'@'localhost' identified by 'PASSWORD';
    mysql> quit
    

    データベース(wordpress)を作成します。

    $ mysql -u root -p
    mysql> CREATE DATABASE wordpress;
    mysql> GRANT ALL PRIVILEGES ON wordpress.* TO "wordpress"@"localhost";
    mysql> FLUSH PRIVILEGES;
    

    バックアップファイルのsqlスクリプト(wordpress.sql)を流し込みます。

    $ mysql -u wordpress -p
    mysql> use wordpress;
    mysql> source wordpress.sql
    

    バックアップファイル(backwpup.tar.gz)を展開します。(実際には,上のwordpress.sqlが必要なので,展開済みです)。

    $ cd /var/www/public_html
    $ sudo mkdir blog
    $ cd blog
    $ sudo tar xvf backwpup.tar.gz
    $ sudo rm wordpress.sql
    $ sudo rm backwpup.tar.gz
    $ sudo chmod www-data -R *
    $ sudo chown www-data -R *
    

    curlでうまくブログの内容が取得できてOKです。

    $ curl http://127.0.0.1/blog/
    

    ブラウザで開いたらプラグインが移行されていませんでした。(そのようにBackWPupを設定していた)。ので,コピーしました。

    $ cd /var/www/public_html/blog/wp-content
    $ scp -r chitora@192.168.1.1:/home/chitora/public_html/blog/wp-content/plugins .
    

    プラグインの有効化と設定を再確認(パスの調整をしたかも)して,OKです。

  • Redmineのインストール

    プロジェクト管理用に,Redmineをインストールします。

    $ sudo apt-get install make
    $ sudo apt-get install ruby1.9.1-dev
    $ sudo gem install ruby-openid
    $ sudo gem install bundler
    $ wget http://rubyforge.org/frs/download.php/77138/redmine-2.3
    $ tar xvf redmine-2.3.3.tar.gz
    $ cd redmine-2.3.3
    $ sudo gem install json -v '1.8.0'
    $ sudo apt-get install imagemagick libmagickcore-dev libmagicckwand-dev
    $ sudo gem install rmagick -v '2.13.2'
    $ sudo bundle install --without development test
    
    ...(略)...
    Your bundle is complete!
    Gems in the groups development and test were not installed.
    Use `bundle show [gemname]` to see where a bundled gem is installed.

    旧Redmineからのデータベース移行は次回。

    と思ったら不足があったので,追記。passengerの事をすっかり忘れていました。

    $ sudo apt-get install libmysqlclient-dev
    $ sudo gem install mysql2
    $ sudo gem install passenger --no-rdoc --no-ri

    指示通りに,build-essential libcurl4-openssl-dev lib ssl-dev apache2-threaded-dev libapr1-dev libaprutil1-dev をインストール。

    $ sudo passenger-install-apache2-module

    apacheの方の設定を下記 redmine.load に張り付ける。

    $ sudo vi /etc/apache2/mods-available/redmine.load
    $ cd /etc/apache2/mods-enabled
    $ sudo ln -snf ../mods-available/redminne.load redmine.load

    権限の調整。

    $ cd ~/redmine-2.3.3
    $ sudo chown -R 自分:自分 *

    以下,データベースの移行。 redmine.db は旧サーバーで mysqldump したファイル。

    $ mysql -u redmine -p < redmine.db
    $ scp 自分@旧サーバー:/home/自分/redmine-1.2.1/files/* ~/redmine-2.3.3/files/.
    $ cd ~/redmine-2.3.3/
    $ RAILS_ENV=production rake db:migrate
    $ rake generate_secret_token

    database.ymlの設定。

    $ cd ~/redmine-2.3.3/config
    $ cp database.yml.example database.yml
    $ vi database.yml
    

    /etc/apache2/sites-available/my_site_に追加。

    <VirtualHost *:80>
            ServerName redmine.chitora.com
            DocumentRoot /home/自分/redmine-2.3.3/public
        <Directory /home/自分/redmine-2.3.3/public/>
            AllowOverride all
            allow from all
            Options -MultiViews
        </Directory>
    </VirtualHost>
    

    apacheの再起動。

    $ sudo /etc/init.d/apache2 restart

    以上で,表面上はRedmineが開けました。中の動作は未確認です。

  • Webコンテンツのデプロイ

    デプロイといっても,crontabでgit pullするだけになります。/etc/cron.dailyの存在を知ったので,新サーバーではそこにpullするスクリプトを置くことにしました。また,DynamicDNSの設定も,/etc/cron.dailyで実施するように変更しました。

    まず,git cloneしておきます。-lを付けるものかと思いましたが,エラーが出ましたので,-l無しでgit cloneしました。gerritが管理しているgitリポジトリは,review_site/git配下にありますので,そこからcloneします。リポジトリ名はpublic_html.gitとしています。

    $ cd /var/www
    $ sudo git clone ~gerrit2/review_site/git/public_html.git

    次に,git pullするスクリプトを/etc/cron.dailyに作成します。

    $ sudo vi /etc/cron.daily/pull.sh 
    
    #!/bin/sh
    cd /var/www/public_html
    git pull
    
    $ sudo chmod +x /etc/cron.daily/pull.sh

    これで,1日に1度gitリポジトリからpullされます。

    ソースコードではないので,レビューは不要かと思います。クライアントPCからは,

    $ git push origin

    で,gerritレビューを回避して,直接リポジトリにpushします。(gerrit側パーミッションの設定が必要かもしれません)。あるいは,通常どおりgerrit上でレビューすることもできます。

    $ git push origin master:refs/for/master

    /etc/crontabの内容(dailyの部分)は,

    25 6* * *(略)

    となっているので,午前6時25分に更新がかかるものと思われます。

    /etc/apache2/sites-available/my_siteのDocumentRootとDirectoryの設定を,/var/www/public_htmlに変更しました。apache2をリスタートして,

    public_html

    とブラウザで確認OKです。

  • Gerritのリバースプロキシ動作

    review.chitora.comでアクセスすると,Gerritコードレビューにつながるようにします。

    まず,apacheのproxy_httpモジュールを有効にします。

    $ sudo a2enmod proxy_http

    my_siteにreview.chitora.comを追加します。

    $ sudo vi /etc/apache2/sites-available/my_site
    (追加部分のみ)
    <VirtualHost *:80>
            ServerName review.chitora.com
    
            ProxyRequests Off
            ProxyVia Off
            ProxyPreserveHost On
    
            <Proxy *>
                    Order deny,allow
                    Allow from all
            </Proxy>
    
            AllowEncodedSlashes On
            ProxyPass / http://127.0.0.1:8081/ nocanon
    </VirtualHost>

    apacheを再起動します。

    $ sudo /etc/init.d/apache2 restart

    Windows PCからブラウザで開いてOKです。「review.chitora.com/」と末尾にスラッシュが必要ですが,まあいいでしょう。

    gerrit2

    gerrit.confのhttpdセクションは以下のようになっていて,少しドキュメントと異なります。

    [httpd]
            listenUrl = proxy-http://127.0.0.1:8081/
    
  • Gerritの自動起動

    サーバーをリセットする度に手動でGerritを起動するのは面倒ですので,自動で起動するようにします。

    まず,/etc/init.d/に起動スクリプトを作成します。ドキュメントのようにシンボリックリンクを作成しても,自分の環境ではうまくいきませんでした。

    $ sudo vi /etc/init.d/gerrit
    
    #!/bin/sh
    su gerrit2 -c "~/review_site/bin/gerrit.sh $1"
    
    $ sudo chmod +x /etc/init.d/gerrit

    runlevelが2でしたので,rc2.dにシンボリックリンクを作成しました。

    $ cd /etc/rc2.d
    $ ln -snf ../init.d/gerrit S90gerrit

    再起動して,

    $ sudo shutdown -r now

    クライアントPCから接続確認して,OKです。

    $ ssh -p 29418 chitora@192.168.1.7 gerrit ls-projects
    7-Zip
    Bzip2
    ...
  • Gerritの移行

    WebコンテンツもGerrit配下のgitリポジトリで管理していることから,Gerritを先に移行することにしました。H2データベースを使用していることから,以下の手順ではデータベースの移行が不要となっています。MySQL / PostgreSQL では,データベースの移行が必要と思われます。

    まず,gerrit2ユーザーを追加します。

    $ sudo adduser gerrit2
    $ sudo su gerrit2
    $ cd ~

    gerrit-2.7.warを取得します。

    $ wget http://gerrit-releases.storage.googleapis.com/gerrit-2.7.war

    旧サーバーで圧縮してコピーしたreview_siteフォルダを展開します。scpを使ったことがないので,WinSCP経由でのコピーをしました(笑)。

    $ tar zxvf review_site.tar.gz

    jreをインストールします。openjdk-7でOKでした。headlessの意味はよく分かりませんが,Ubuntuにサジェストされたものを使いました。

    $ sudo apt-get install openjdk-7-jre-headless

    gerritをインストールします。対話的に設定を聞かれますが,旧設定がデフォルトになっているので,そのままEnterキーを押していきます。 Java runtime だけ /usr/lib/jvm/java-7-openjdk-amd64 に変更する必要がありました。旧サーバーの設定はopenjdk-6でした。

    $ java -jar gerrit-2.7.war init -d review_site

    gerritはポート29418を使用するので,開けます。合言葉は,「にくよいな+1」(C)みやびさん,です。

    $ sudo ufw allow 29418/tcp

    gerritを開始します。

    $ cd review_site
    $ ./bin/gerrit.sh start
    Starting Gerrit Code Review: OK

    既にgerritに公開鍵を登録してあるクライアント(Windows PC)から接続を確認します。git bashで,

    $ ssh -p 29418 chitora@192.168.1.7 gerrit ls-projects

    known hostsへの追加の後,プロジェクトのリストが表示されて接続確認OKでした。

    リバースプロキシのapache側の設定は後日にします。

     

  • apacheの設定

    apacheはUbuntu Serverのインストール時に既に入ったようでしたので,設定だけ行いました。

    $ cd /etc/apache2/sites-available
    $ sudo cp default my_site
    
    $ sudo vi my_site
    
    <VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName chitora.com
    
    DocumentRoot /var/www
    <Directory />
    Options FollowSymLinks
    AllowOverride None
    </Directory>
    <Directory /var/www/>
    Options -Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
    </Directory>
    
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options -Indexes +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
    </Directory>
    
    ErrorLog ${APACHE_LOG_DIR}/error.log
    
    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn
    
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    
    $ sudo a2dissite default
    $ sudo a2ensite my_site
    

    変更点は,ServerNameの設定と,-Indexesの追加です。-Indexesで,ディレクトリ内容が表示されないようにします。

    apacheを再起動します。

    $ sudo /etc/init.d/apache2 restart

    ブラウザから開けない! と思ったら,ufwの設定を忘れていました。

    $ sudo ufw allow http

    無事にブラウザから開くことができました。

    apache