OpenSUSE 13: Tracをインストールする

Tracのインストール方法を記載します。ダイジェスト認証でユーザを管理します。

1 Tracのインストール

Tracを導入する時に一度だけ実行します。

1.1 tracとapache2-mod_wsgiのインストール

tracはFedora 25のsrc.rpmをビルドしてインストールします。

$ sudo zypper -n in rpm-build
$ F25=https://dl.fedoraproject.org/pub/fedora/linux/releases/25
$ wget -q ${F25}/Everything/source/tree/Packages/t/trac-1.0.13-1.fc25.src.rpm
$ rpm -i trac-1.0.13-1.fc25.src.rpm
$ cd ~/rpmbuild
$ sudo zypper -n in $(rpmspec -q SPECS/trac.spec --buildrequires)
$ rpmbuild -ba SPECS/trac.spec
$ sudo zypper -n in RPMS/noarch/trac-1.0.13-1.noarch.rpm
$ cd ..

apache2-mod_wsgiをインストールします。

$ sudo zypper -n in apache2-mod_wsgi

Apache2を有効にします。

$ sudo systemctl enable apache2

1.2 auth_digestの有効化

auth_digestを有効にします。

$ sudo a2enmod auth_digest

1.3 80/tcpポートの開放

apache2のポートを開放します。

$ firewall_open_service()
{
  for t in FW_CONFIGURATIONS_EXT FW_CONFIGURATIONS_DMZ FW_CONFIGURATIONS_INT; do
    sudo sed -e "s/^${t}=\"\(.*\)\"/${t}=\"\1 $1\"/g" \
         -i /etc/sysconfig/SuSEfirewall2
  done
  sudo systemctl restart SuSEfirewall2
}
$ firewall_open_service apache2

1.4 プロジェクトのルートディレクトリの追加

プロジェクトを格納するディレクトリを作成します。このディレクトリ配下にプロジェクトのディレクトリを追加していきます。

$ sudo mkdir /var/lib/trac
$ sudo mkdir -p /var/www/html/trac
$ sudo chown wwwrun:www /var/www/html/trac

2 プロジェクトの追加

プロジェクトを新規に追加する度に実行します。

2.1 プロジェクト用ディレクトリの追加

プロジェクトを作成します。

$ sudo trac-admin /var/lib/trac/test initenv test sqlite:db/trac.db
$ sudo trac-admin /var/lib/trac/test deploy /var/www/html/trac/test
$ sudo chown -R wwwrun:www /var/lib/trac/test
$ sudo chown -R wwwrun:www /var/www/html/trac/test

2.2 ユーザの追加

管理者ユーザを追加します。

$ sudo htdigest2 -c /var/lib/trac/test/.htdigest "test" admin
Adding user admin in realm test
New password:
Re-type new password:
$ sudo trac-admin /var/lib/trac/test permission add admin TRAC_ADMIN

一般ユーザを追加します。すでにパスワードファイルがあるので-cオプションなしでhtdigestを実行します。

$ sudo htdigest2 /var/lib/trac/test/.htdigest "test" hiroom2
Adding user hiroom2 in realm test
New password:
Re-type new password:

2.3 Apache2のconf作成

プロジェクト用のconfファイルを作成します。

$ sudo su -c '
cat <<EOF > /etc/apache2/conf.d/test.conf
WSGIScriptAlias /trac/test /var/www/html/trac/test/cgi-bin/trac.wsgi
<Location /trac/test>
  AuthType Digest
  AuthName "test"
  AuthUserFile /var/lib/trac/test/.htdigest
  Require valid-user
</Location>
EOF
'

Apache2を再起動します。

$ sudo systemctl restart apache2

3 Tracへのアクセス

以下のURLにブラウザでアクセスします。

http://<server>/trac/test

ダイジェスト認証のダイアログが表示されます。

0001_Digest-Auth.png

Tracのページが表示されました。adminユーザでログインしています。

0002_Trac.png

4 Tracをインストールするスクリプト

以下のスクリプトは自動的にTracをインストールします。

#!/bin/sh

firewall_open_service()
{
  for t in FW_CONFIGURATIONS_EXT FW_CONFIGURATIONS_DMZ FW_CONFIGURATIONS_INT; do
    sudo sed -e "s/^${t}=\"\(.*\)\"/${t}=\"\1 $1\"/g" \
         -i /etc/sysconfig/SuSEfirewall2
  done
  sudo systemctl restart SuSEfirewall2
}

install_trac()
{
  sudo zypper -n in rpm-build
  F25=https://dl.fedoraproject.org/pub/fedora/linux/releases/25
  wget -q ${F25}/Everything/source/tree/Packages/t/trac-1.0.13-1.fc25.src.rpm
  rpm -i trac-1.0.13-1.fc25.src.rpm
  cd ~/rpmbuild
  sudo zypper -n in $(rpmspec -q SPECS/trac.spec --buildrequires)
  rpmbuild -ba SPECS/trac.spec
  sudo zypper -n in RPMS/noarch/trac-1.0.13-1.noarch.rpm
  cd ..

  sudo zypper -n in apache2-mod_wsgi

  sudo a2enmod auth_digest
  sudo systemctl enable apache2
  firewall_open_service apache2

  sudo mkdir /var/lib/trac
  sudo mkdir -p /var/www/html/trac
  sudo chown wwwrun:www /var/www/html/trac
}

TMP=`mktemp -t linux-trac.sh.XXXXXX`
trap "rm $TMP* 2>/dev/null" 0
sudo zypper -n in expect

create_digest()
{
  filename=$1
  realm=$2
  username=$3
  password=$4
  options=

  if [ ! -f ${filename} ]; then
    options=-c
  fi

  cat <<EOF > ${TMP}
set timeout -1
spawn sudo htdigest2 ${options} ${filename} ${realm} ${username}
expect "New password: "
send "${password}\n"
expect "Re-type new password: "
send "${password}\n"
expect eof
EOF
  expect ${TMP}
}

ADMIN_PASSWORD="trac"
USER_PASSWORD="trac"

create_test_project()
{
  sudo trac-admin /var/lib/trac/test initenv test sqlite:db/trac.db
  sudo trac-admin /var/lib/trac/test deploy /var/www/html/trac/test
  sudo chown -R wwwrun:www /var/lib/trac/test
  sudo chown -R wwwrun:www /var/www/html/trac/test

  create_digest /var/lib/trac/test/.htdigest "test" admin ${ADMIN_PASSWORD}
  sudo trac-admin /var/lib/trac/test permission add admin TRAC_ADMIN
  create_digest /var/lib/trac/test/.htdigest "test" hiroom2 ${USER_PASSWORD}

  sudo su -c '
cat <<EOF > /etc/apache2/conf.d/test.conf
WSGIScriptAlias /trac/test /var/www/html/trac/test/cgi-bin/trac.wsgi
<Location /trac/test>
  AuthType Digest
  AuthName "test"
  AuthUserFile /var/lib/trac/test/.htdigest
  Require valid-user
</Location>
EOF
'
  sudo systemctl restart apache2
}

install_trac
create_test_project