ALMInium¶
Redmine、DVCS(Git/VMercurial)、Backlogs、コードレビュープラグインなど、開発に必要な環境を簡単にセットアップできるもの。
Portal¶
http://alminium.github.io/alminium/
https://github.com/alminium/alminium
CentOS7にインストールする方法¶
ここを参考にさせて頂きましたが、CentOS7だと、いろいろ問題があります。
http://little-braver.com/346/
課題1 MySQLからmariadbに変更になっている¶
MySQLとmariadbは、ほぼ互換なのだけれど、サービス起動の名前が違っていたりして、smeltスクリプトでデーモンの起動が失敗する。
そのため、smelt実行前に予め起動しておく。
#service mariadb start
課題2 SELinuxの設定の無効化/ファイウォールの無効化¶
起動の仕様がinit/upstartからsystemdに変更になっているからなのか、
smeltスクリプトでデーモンの起動や、設定が失敗する。
インストール時には、ファイアフォールは解除しておく。後で80だけ許可しましょう(その手順は後述)。
#iptables -F
ちなみに、CentOS7は、iptablesじゃなくて、firewalldに変更になっているので、
これまでのやりかたではダメ。
課題3 mod_perlがApache2.4に対応していないので、インストールできない¶
これが一番の問題。mod_perlが足りなくて、apacheが起動できない。
なので、mod_perlを使う設定を外すんだけど・・・
外しちゃうと、svn連携やgit連携が出来なくなると思う。
mod_perlがいつ対応してくれるのかも不明。もう1年ぐらい更新されていない。
ALMiniumインストール後(smelt実行後)に、以下を実施する。
#vi /etc/opt/alminium/alminium.conf - Include /etc/opt/alminium/vcs.conf + #Include /etc/opt/alminium/vcs.conf
以上の対応で、httpdは起動できる。
#service httpd start
課題4 ブラウザでアクセスしても、httpsにReWriteされる¶
localhost以外でアクセス(IP直打ちとか)すると、
/etc/httpd/conf.d/welcome.conf
に設定されているページが優先されて表示されてしまう。
# vi /etc/opt/alminium/redmine.conf - RewriteEngine On + RewriteEngine Off
で、解決する。
インストール手順¶
SELinuxを無効にする¶
SELinuxが有効だと、細かい設定が大変なので無効にします。
vi /etc/sysconfig/selinux
「enforcing」を「disabled」へ変更します。
- SELINUX=enforcing + SELINUX=disabled
再起動後、「getenforce」コマンドで「Disabled」になっていることを確認します。
# getenforce Disabled
ポートの開放¶
firewalldで80のポートを追加します。
現在のゾーン(デフォルトはpublic)に、http(80番ポート)の通信を許可する。
ゾーンの確認
# firewall-cmd --list-all
httpポート解放の設定
# firewall-cmd --add-service=http --zone=public --permanent
定期の反映
# firewall-cmd --reload
yumでいろいろインストール¶
# yum groupinstall "Development Tools" # yum install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel # yum install httpd httpd-devel # yum install ImageMagick ImageMagick-devel ipa-pgothic-fonts # yum install wget git # yum install mariadb-server mariadb-libs mariadb-devel mariadb # yum install ruby ruby-devel ruby-libs rubygem
bundlerのインストール¶
# gem install bundler --no-rdoc --no-ri
Passengerのインストール¶
# gem install passenger --no-rdoc --no-ri # passenger-install-apache2-module
ALMiniumのインストール¶
GitHubからALMiniumを取得します。
# git clone https://github.com/alminium/alminium.git
「git checkout dev」コマンドで開発中の最新バージョンをチェックアウトします。
# cd alminium # git checkout dev
「smelt」を実行し、ホスト名などのオプションを選択します。
# bash ./smelt
以下を前提に、動作確認しています。
* SSLのサポート→しない
* セキュリティの設定→する(SE Linuxの無効化をする)
* Jenkinsインストール→しない
* SE Linux →設定する
smeltの実行が終わったら、前述の「課題3」と「課題4」を実施。
インストール完了¶
ブラウザに
http://[ipアドレス]
とか
http://localhost
と入力して表示されればOK!
ほっとくとログが肥大していくので切り替える設定をする¶
logrotateを利用する。logrotateの細かい仕様の話はググってもらうとして、結局のところ、CentOS7では、
/etc/logrotate.d
配下に設定ファイル(ファイル名任意)を作ればよい。
# cd /etc/logrotate.d # vi redmine + /opt/alminium/log/production.log { + weekly + rotate 4 + dateext + copytruncate + missingok + }
ファイルを作ったらテストしてみる。以下のコマンドを叩く。
-dオプションだと、実際にログの切替は発生しない。エラーが出なかったら、とりあえずOK。
# logrotate -dv /etc/logrotate.d/redmine reading config file /etc/logrotate.d/redmine Handling 1 logs rotating pattern: /opt/alminium/log/production.log weekly (4 rotations) empty log files are rotated, old logs are removed considering log /opt/alminium/log/production.log log does not need rotating
本当にこれで動いてくれるかは、ログ切替タイミングでログ出力先を確認してみよう。
(環境に依存するが、おそらく日曜日の朝に切り替えになる。 その後、 /opt/alminium/log の中を確認してみること。cronのログを確認するのもいいと思う。)
ちなみに強制実行は、
# logrotate -f /etc/logrotate.d/redmine
これで即時切替する。
MariaDB(MySQL)の文字コードをutf8mb4にする¶
utf8の4Byte文字に対応するよう文字コードを変更しておく。
初期状態では、4byte文字を入力するとおかしなことになる。
以下を参考にして実施。
Dig that groovy! - Redmine構築後のDBの文字コードをutf8mb4に変換して絵文字に対応する
http://zappy.hatenablog.jp/entry/2015/05/19/015044
1.DBのバックアップ
念のためにしておく
2.my.cnfの変更
# vi /etc/my.cnf.d/server.cnf
以下を[mysqld]セクションへ追記。
[mysqld] character-set-server = utf8mb4 innodb_file_format = Barracuda innodb_file_per_table = 1 innodb_large_prefix
3.Mariadbを再起動
# service mariadb restart
DB情報を変数にあらかじめ追加する
4.DB情報を変数にあらかじめ追加する
# MYSQL_DB=alminium # MYSQL_USER=alminium # MYSQL_PASS=alminium # CONVERT_SCRIPT_FILE=convert_script
5.文字コード変換用スクリプトの作成
# (echo 'alter database `'"$MYSQL_DB"'` default character set utf8mb4;'; mysql -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB -e "show tables" --batch --skip-column-names | xargs -I{} echo -e 'alter table `'{}'` ROW_FORMAT=DYNAMIC;\nalter table `'{}'` convert to character set utf8mb4;') > $CONVERT_SCRIPT_FILE
めっちゃ助かりました。クポさん、ありがとうございます。
6.スクリプトの実行
# mysql -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB < $CONVERT_SCRIPT_FILE
7.RedmineのDB設定の変更
# vi /opt/alminium/config/database.yml - encoding: utf8 + encoding: utf8mb4
8.Apache再起動
# service httpd restart
その他¶
httpsでアクセスしたい¶
# vi /etc/opt/alminium/alminium.conf
コメントアウトを外す
- #Include /etc/opt/alminium/redmine-ssl.conf + Include /etc/opt/alminium/redmine-ssl.conf
バックアップ&リストア¶
バックアップ¶
dbは、alminium配下だけでも、リストア対象としては、十分です。
私は、リストア時に設定ファイルの差分を確認したいので、丸ごともバックアップしています。
# mysqldump -u root alminium > /tmp/backup_20150101_mariadb_alminium.dmp # mysqldump -u root --all-databases > /tmp/backup_20150101_mariadb_all.dmp
tarは、/opt/alminium/files配下だけでも、リストア対象としては、十分です。
私は、リストア時に設定ファイルの差分を確認したいので、丸ごとバックアップしています。
# cd /opt # tar cvfj /tmp/backup_20150101_opt_alminium.tar.bz2 alminium
リストア¶
# service httpd stop # cd /opt/alminium # tar xvfj /tmp/backup_20150101_opt_alminium.tar.bz2
前提として、alminiumのdatabaseがからで存在すれば、バックアップ時に取得したダンプデータを使ってデータを投入できます。
# mysql -u root alminium < /tmp/backup_20150101_mariadb_alminium.dmp
databaseがなんにもなかったら、これでいけるんじゃないかな・・・
# mysql -u root alminium < /tmp/backup_20150101_mariadb_all.dmp
wikiの生データ抽出(自作ツール)¶
以下のシェルスクリプトで、wikiの加工前(MarkDown記法そのまま)のデータを取得できます。
別の環境に移行する時や、うっかりwikiだけ消してしまった時の復旧などに便利。
実行するとカレントディレクトリにwiki毎にテキストファイルを吐くので、実行する場所は注意してください。wikiの記事数によるけど、いっぱいファイルが吐かれるよ!
getRedmineWiki.sh
#!/bin/bash
# Redmineのwikiをそのままダンプするシェルスクリプト ver 0.2
# 2016.9.18 kanata
# 環境に合わせて書き換えてね ----------
URL="https://raintrees.net"
PROJECTID="a-painter-and-a-black-cat"
ID="xxxxxxxxxx"
PASS="xxxxxxxxxx"
#--------------------------------------
LIST=`curl -s -b cookie.txt -c cookie.txt ${URL}/projects/${PROJECTID}/wiki/index|grep "^<li><a"|grep wiki|grep -v "wiki selected"|grep "^<li><a"|grep wiki|grep -v "wiki selected"|cut -d'/' -f5|cut -d"\"" -f1`
#########
# login #
#########
echo "login start"
while :
do
TOKEN=`curl -s -b cookie.txt -c cookie.txt ${URL}/login|grep authenticity_token|cut -d "\"" -f20|tail -1`
RESULT=`curl -s -b cookie.txt -c cookie.txt -d "utf8=✓" -d "authenticity_token=${TOKEN}" -d "username=${ID}" -d "password=${PASS}" "${URL}/login"|grep errorExplanation`
if echo ${RESULT} |grep errorExplanation
then
echo "login error. Retrying.."
else
break
fi
done
echo "logged in"
######################
# wikidata get start #
######################
echo "wiki data get start"
for WIKI in ${LIST}
do
echo "- ${WIKI}"
curl -s -L -b cookie.txt -c cookie.txt "${URL}/projects/${PROJECTID}/wiki/${WIKI}/edit" -o ${WIKI}.tmp
#どうやらcurlがファイルにflashするのに時間差があるようなので、少し待つ
sleep 1
#なんちゃってスクレイピング
echo -n "" > ${WIKI}.txt
FLAG="0"
while read LINE
do
if echo ${LINE}|fgrep "<textarea " > /dev/null
then
FLAG="1"
fi
if echo ${LINE}|fgrep "</textarea>" > /dev/null
then
echo "${LINE}" |sed 's/<\/textarea>//g' >> ${WIKI}.txt
FLAG="0"
fi
if [ ${FLAG} = "2" ]
then
echo "${LINE}" >> ${WIKI}.txt
fi
if [ ${FLAG} = "1" ]
then
FLAG="2"
fi
done < ${WIKI}.tmp
rm ${WIKI}.tmp
done
# クッキーは消さない方が吉(初回のログイン処理の動作が安定しないので)
#rm cookie.txt
echo "wiki data get finish"
exit 0
ログイン処理に失敗したりする。何度か実行すると成功する。なんでだ。。