投稿者: chitora

  • Gerrit 2.8-rc1 へのアップデート

    Gerrit 2.8-rc1 が出ています。H2使用の2.7からのアップデートで何も問題ありませんでした。(過去にどうにもならなくなったことが一度あります)。

    $ sudo su gerrit2
    $ cd ~gerrit2/review_site
    $ ./bin/gerrit.sh stop
    Stopping Gerrit Code Review: OK
    $ wget http://gerrit-releases.storage.googleapis.com/gerrit-2.8-rc1.war
    $ java -jar gerrit-2.8-rc1.war init -d .

    あとは,前設定のままEnterキー押して,

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

    でOKでした。

  • Ubuntu 13.10へのアップグレード

    Ubuntu 13.10 がリリースされました。さっそくアップグレードします。

    $ sudo do-release-upgrade -d

    なにごともなくアップグレードが完了しましたが,Webアクセスができません!

    $ sudo /etc/inidt.d/apache2 restart
     * Restarting web server apache2        
    [fail]
     * The apache2 configtest failed.
    Output of config test was:
    apache2: Syntax error on line 140 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/redmine.load: Cannot load /var/lib/gems/1.9.1/gems/passenger-4.0.19/buildout/apache2/mod_passenger.so into server: /var/lib/gems/1.9.1/gems/passenger-4.0.19/buildout/apache2/mod_passenger.so: undefined symbol: unixd_config
    Action 'configtest' failed.
    The Apache error log may have more information.

    「undefined symbol: unixd_config」だそうです。Linuxの世界はすごいですねぇ。

    passengerを新しくします。

    $ sudo gem install passenger --no-rdoc --no-ri
    
    $ sudo passenger-install-apache2-module
    

    ライブラリが足りないとかapache2のmpmがおかしいとか言われるので,

    $ sudo apt-get install apache2-mpm-prefork apache2-prefork-dev libapr1-dev libaprutil1-dev
    

    再度,

    $ sudo passenger-install-apache2-module
    

    設定が表示されるので,貼り付けます。

       LoadModule passenger_module /var/lib/gems/1.9.1/gems/passenger-4.0.20/buildout/apache2/mod_passenger.so
       PassengerRoot /var/lib/gems/1.9.1/gems/passenger-4.0.20
       PassengerDefaultRuby /usr/bin/ruby1.9.1
    
    $ sudo vi /etc/apache2/mods-available/redmine.load
    

    apache2を再起動します。

    $ sudo /etc/init.d/apache2 restart
    

    がびーん。「It works!」になってしましました。

    $ cd /etc/apache2/sites-available
    $ sudo a2ensite my_site
    
    ERROR: Site my_site does not exist!
    

    あれ? では,

    $ sudo mv my_site my_site.conf
    $ sudo a2ensite my_site
    
    Enabling site my_site.
    To activate the new configuration, you need to run:
      service apache2 reload
    

    よし。

    $ sudo /etc/init.d/apache2 restart
    
     * Restarting web server apache2        
    [fail]
     * The apache2 configtest failed.
    Output of config test was:
    AH00526: Syntax error on line 11 of /etc/apache2/sites-enabled/my_site.conf:
    Either all Options must start with + or -, or no Option may.
    Action 'configtest' failed.
    The Apache error log may have more information.
    

    もういや~ん。+-つけるわ~。

    $ sudo vi my_site.conf 
    

    やっと表示できた~と思ったら,今度は redmine.chitora.com が「403 Forbidden」! いろいろ見て,

    <VirtualHost *:80>
            ServerName redmine.chitora.com
    
            DocumentRoot /home/chitora/redmine-2.3.3/public
            <Directory /home/chitora/redmine-2.3.3/public/>
                    AllowOverride All
                    Options -MultiViews
                    Require all granted
            </Directory>
    </VirtualHost>
    

    「Require all granted」で解決しました。

  • 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
    ...