「VCS」の版間の差分
(Specifying repositories) |
|||
(同じ利用者による、間の21版が非表示) | |||
54行目: | 54行目: | ||
savaneはメンテナンスされていないので、Trac一択。redmineはCGIで動作しない。 | savaneはメンテナンスされていないので、Trac一択。redmineはCGIで動作しない。 | ||
== Phorge == | == Phorge == | ||
[https://we.phorge.it/ Home] | [https://we.phorge.it/ Home] | ||
558行目: | 248行目: | ||
Kallitheaをインストール。 | Kallitheaをインストール。 | ||
pip install --upgrade kallithea | pip install --upgrade kallithea | ||
ここの--upgradeがあるとまずい模様。 | |||
pip install kallithea | |||
なんかエラーが出る。 | なんかエラーが出る。 | ||
ERROR: Command errored out with exit status 1: | ERROR: Command errored out with exit status 1: | ||
653行目: | 345行目: | ||
KallitheaはCGI未対応。見送ったほうがいいかも。 | KallitheaはCGI未対応。見送ったほうがいいかも。 | ||
古いデータを削除してインストールし直したら、postgresqlでセットアップ成功した。 | |||
pip install kallithea | |||
--upgradeがあるのがまずかった模様。 | |||
インストールできたので起動。 | |||
gearbox serve -c my.ini | |||
ただ、WSGIをFastCGIにうまくやる方法などは見つからない。phorge/fossil/kallithea/tracと試して最終的にfossilになる感じ。 | |||
== Trac == | == Trac == |
2025年1月9日 (木) 14:10時点における最新版
List
Comparison of issue-tracking systems - Wikipedia https://en.wikipedia.org/wiki/Comparison_of_issue-tracking_systems
BTS。GitHubみたいな。PHP製の以下がよさそう。
- Tuleap
- Phabricator/Phorge: 共用サーバー不能。
- MantisBT
- FusionForge
- GLPI
- Faveo Helpdesk
- sourcehut - the hacker's forge: Python製。FSF推奨。
- Fossil
VCSとの統合状況がまちまち。
phorgeがダメだったので、Mantis/Fossil/sourcehutあたりが共用サーバーで検討可能か。
https://chatgpt.com/c/674f8938-8590-800b-9a4c-f1ec04fc5869
他に以下がある。
- Gitea
- Cgit
- Gitlab
- SourceHut: Python
- GitBucket: Java
Gitlabは共用サーバーで可能なのか?無理。cgitの他、gogsもある?
CGIで利用可能なもの。
- Cgit: gitの出力を見れるだけ。issueはない。
- Gitweb: cgit同様。
- ViewGit:
- Kallithea: 有力。Kallithea。WSGI。CGI未対応。
他に。
- rhodecode: CGIではない。Python+WSGI
- Category:Project management software - Wikipedia
「Pythonは人気の言語です。しかし、その割にPythonが気軽に利用できるレンタルサーバーは少ない感じがします。何故、レンタルサーバーはPythonの利用に消極的なのですか? - Quora」にあるように、WSGIをCGIにすることもできるがいまいちらしい。
他。
https://chatgpt.com/c/67546eda-20ac-800b-b37f-7e8954c128f5
- GNU Savannah/savane
- Bugzilla: 課題管理のみ。
- Trac: CGI OK。
- Roundup (Roundup Issue Tracker - Roundup 2.4.0 documentation): 課題管理のみ?
- Debbugs
savaneはメンテナンスされていないので、Trac一択。redmineはCGIで動作しない。
Phorge
PhorgeはPhabricatorのフォーク。
About
Introduction
以下が主な機能。
- コードレビューツール=Differential
- リポジトリーブラウザー=Diffusion
- バグトラッカー=Maniphest
- ウィキ=Phiriction
GitHubの自己ホスト。
Phabricator
PhabricatorはもともとFacebook社内のBTSシステム。PHP製。2021-06-01に開発終了。
主なユーザー。
- AngularJS
- Discord
Install
- ◉ Installation Guide
- Self Host with IPv6rs - IPv6 Provider - How to Install Phorge on Ubuntu Server Latest
- https://chatgpt.com/c/6749041b-a1b4-800b-a134-96a8029c086e
Requirement
LAMP環境で動作する。
共用ホストでも動作するが、一部機能しない。通常コンピューターを推奨している。
- MySQL: 5.5以上。
- PHP 7.2以上
- git: 2.5.0以上。
- PHP extension: mbstring, iconv, mysql (or mysqli), curl, pcntl
ドメインはサブディレクトリーはだめで、サブドメインじゃないとダメ。
Download
以下のコマンドで取得する。
$ cd somewhere/ # pick some install directory somewhere/ $ git clone https://we.phorge.it/source/arcanist.git somewhere/ $ git clone https://we.phorge.it/source/phorge.git
gitの設定。
$ sudo git config --system --add safe.directory somewhere/arcanist $ sudo git config --system --add safe.directory somewhere/phorge
phorge用のDBを作っておく。
cp /var/www/html/phorge/phabricator/conf/local/local.json.example /var/www/html/phorge/phabricator/conf/local/local.json
"mysql.host": "localhost", "mysql.user": "phorge", "mysql.pass": "password", "mysql.port": 3306, "mysql.charset": "utf8", "mysql.database": "phorgedb"
後は開くだけ。
実操作。
こういうディレクトリー構成想定。
public_html + phorge.gnusocial.jp 公開ディレクトリー。 + phorge phorge関係の格納場所。 + phorge + arcanist
取得。
TAG=2024.35 mkdir phorge cd phorge PKG=phorge git clone --depth 1 https://we.phorge.it/source/$PKG.git cd $PKG; git fetch --depth 1 origin tag $TAG; git checkout $TAG; cd .. PKG=arcanist git clone --depth 1 https://we.phorge.it/source/$PKG.git cd $PKG; git fetch --depth 1 origin tag $TAG; git checkout $TAG; cd ..
git config --add safe.directory arcanist git config --add safe.directory phorge
phorge/webrootが公開ディレクトリーになるので、これをシンボリックリンクで公開ディレクトリーにリンクする。
DOMAIN=phorge.gnusocial.jp ln -fns phorge/phorge/webroot ../$DOMAIN
「◉ Configuration Guide」に記載のあるリダイレクト設定をする。
以下相当の設定を行う。
<VirtualHost *> # Change this to the domain which points to your host. ServerName phorge.example.com # Change this to the path where you put 'phorge' when you checked it # out from the upstream when following the Installation Guide. # # Make sure you include "/webroot" at the end! DocumentRoot /path/to/phorge/webroot RewriteEngine on RewriteRule ^(.*)$ /index.php?__path__=$1 [B,L,QSA] </VirtualHost> <Directory "/path/to/phorge/webroot"> Require all granted </Directory>
具体的には、phorge/webroot/.htaccessに以下を記載して、ファイルがなければ作成する。
cat >phorge/webroot/.htaccess <<-'EOT' RewriteEngine on RewriteRule ^(.*)$ /index.php?__path__=$1 [B,L,QSA] EOT
上記設定後phorge.gnusocial.jpにアクセスすると以下のエラーになる。
Request parameter '__path__' is not set. Your rewrite rules are not configured correctly.
- apache - Phabricator rewrite rules configuring issue - Stack Overflow
- php - Phabricator install. Rewrite rules are not configured correctly - Stack Overflow
上記が少し参考になる。require指令を指定していないのが問題。
うーん。この問題を解決できない。調べても解決例が出てこない。断念する。他のソフトにする。
Config
以下のコマンドでユーザーを認識させる。
phorge/ $ ./bin/storage upgrade --user <user> --password <password>
Diffusion
Hosting
◉ Diffusion User Guide: Repository Hosting
Kallithea
https://chatgpt.com/c/674f8938-8590-800b-9a4c-f1ec04fc5869
Python 3.6でCGIでも動作する管理ソフト。
Kallithea Documentation — Kallithea 0.7.0 documentation
紹介: GitとMercurialに対応のリポジトリ管理ツール「Kallithea」 - ファーエンドテクノロジー株式会社
Administrator guide
Installation on Unix/Linux
Installation on Unix/Linux — Kallithea 0.7.0 documentation
ディレクトリー構造
https://chatgpt.com/c/674f8938-8590-800b-9a4c-f1ec04fc5869
/var/www/kallithea/ ├── config/ # 設定ファイルやシークレットを保存 │ └── kallithea.ini # Kallitheaのメイン設定ファイル ├── data/ # データベースや一時ファイル用ディレクトリ │ ├── db.sqlite # SQLiteの場合のデータベースファイル │ └── sessions/ # ユーザーセッションデータ ├── logs/ # ログファイル保存ディレクトリ │ └── kallithea.log # メインのアプリケーションログ ├── repos/ # Git/Mercurialリポジトリを保存するディレクトリ │ ├── project1.git/ # プロジェクト1のGitリポジトリ │ └── project2.hg/ # プロジェクト2のMercurialリポジトリ ├── static/ # 静的ファイル(JavaScript, CSS, 画像など) │ ├── css/ │ ├── js/ │ └── img/ └── venv/ # Python仮想環境 ├── bin/ ├── lib/ └── ...
static配下が公開ディレクトリー。共用サーバーの場合。public_htmlにkallitheaとkallithea.domainでシンボリックリンクでやるとよさそう。
Installing a released version in a virtualenv
いくつか方法があるが、virtualenvが推奨されている。
coreserver v1のpythonはpython 3.6だった。
cd public_html/ DOMAIN=kallithea.gnusocial.jp cd $DOMAIN python3 -m venv venv
python3 -m venv venvの実行時に以下のエラー。
Error: Command '['/virtual/senooken/public_html/kallithea.gnusocial.jp/venv/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 2.
cimg/pythonでvenvによる仮想環境の作成がエラーになる #Python - Qiita
pipが見つからないのが原因の模様。--without-pipでインストールして、仮想環境内にpipを直接インストールする。
python3 -m venv --without-pip venv . venv/bin/activate curl https://bootstrap.pypa.io/pip/$(python3 -V | grep -o '[0-9].[0-9]')/get-pip.py -o get-pip.py python3 get-pip.py pip install --upgrade pip
OK。以下のコマンドで基本要件を確実にする。
pip install --upgrade pip "setuptools<67"
Kallitheaをインストール。
pip install --upgrade kallithea
ここの--upgradeがあるとまずい模様。
pip install kallithea
なんかエラーが出る。
ERROR: Command errored out with exit status 1: command: /virtual/senooken/public_html/kallithea.gnusocial.jp/venv/bin/python3 -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/export/tmp/pip-install-4k2ozlqh/formencode_9f25a10925bf49da975ba94c0fbba946/setup.py'"'"'; __file__='"'"'/export/tmp/pip-install-4k2ozlqh/formencode_9f25a10925bf49da975ba94c0fbba946/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /export/tmp/pip-pip-egg-info-kjtbdngw cwd: /export/tmp/pip-install-4k2ozlqh/formencode_9f25a10925bf49da975ba94c0fbba946/ Complete output (3 lines): /usr/lib64/python3.6/distutils/dist.py:261: UserWarning: Unknown distribution option: 'convert_2to3_doctests' warnings.warn(msg) error in FormEncode setup command: use_2to3 is invalid. ---------------------------------------- WARNING: Discarding https://files.pythonhosted.org/packages/2f/53/707c2b9b65ea6bedde67c21cbf7c71394f4a198620d4e9c1771214b91dcc/FormEncode-1.3.1.tar.gz#sha256=ada2f51792b1b484e5bb7b6cc14acfc1bc11fafc967cf015cd57e856053ca7f6 (from https://pypi.org/simple/formencode/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output. Collecting kallithea
[error in FormEncode setup command: use_2to3 is invalid.]
急にpip installで一部のライブラリのインストールが失敗するようになった件 #Python3 - Qiita
setuptoolsを58.0.0未満にすればいいらしい。
pip install setuptools==57.4.0
この実行後pip install --upgrade kallitheaが成功。
Prepare front-end files
以下のコマンドでフロントエンドを用意。
kallithea-cli front-end-build
事前にnpmが必要な模様。
FileNotFoundError: [Errno 2] No such file or directory: 'npm': 'npm'
npmをインストールしたら解決。
Setup
Setup — Kallithea 0.7.0 documentation
Setting up a Kallithea instance
まず以下のコマンドでmy.iniを作成する。
kallithea-cli config-create my.ini http_server=waitress
http_serverのところで使用するHTTPサーバー種別を指定する。waitress, gearbox, gevent, gunicorn, or uwsgi.を指定可能。
ひとまずデフォルトのこれで。
続いてDBを作成する。PostgreSQL/SQLIte/MariaDB/MySQLに対応。最初はSQLiteを使用しておいて、後で他のDBへのアクセスが推奨されている。
が、共用サーバーだと書き込みでプロセス削除されると嫌なので最初からMariaDBにする。まず以下のコマンドでドライバーを取得。
pip install mysqlclient
OSError: mysql_config not found
mariadbは違う模様。以下の開発パッケージが必要らしい。
sudo apt-get install libmysqlclient-dev
不明。一旦スキップ。
SQLite以外を使う場合、my.iniでsqlalchemy.urlのコメントアウトを解除してDBのユーザー名とパスワードを記入しておく。
######################### ## DB CONFIG ## ######################### #sqlalchemy.url = sqlite:///%(here)s/kallithea.db?timeout=60 #sqlalchemy.url = postgresql://kallithea:password@localhost/kallithea #sqlalchemy.url = mysql://kallithea:password@localhost/kallithea?charset=utf8mb4 sqlalchemy.url = mysql://[username]:[password]@localhost/kallithea?charset=utf8mb4 ## Note: the mysql:// prefix should also be used for MariaDB
用意したら以下のコマンドで初期テーブルを作成する。
kallithea-cli db-create -c my.ini --reuse
--reuseを指定しないと、DBやアカウントを作るところからやる。
my.ini内の情報はオプションでも指定できる。
kallithea-cli db-create -c my.ini --user=nn --password=secret --email=nn@example.com --repos=/srv/repos
以下のエラー。
ModuleNotFoundError: No module named 'MySQLdb'
mariadb_configをコピーするとか。共用サーバーだとこの問題の対応が難しいかもしれない。PostgreSQLでやり直す。
postgresqlを使うようにmy.iniを直して実行すると以下のエラー。
ModuleNotFoundError: No module named 'psycopg2'
インストールしてみる。
pip install psycopg2
動作した?以下の質問がきた。
Are you sure to destroy old database? [y/n]y
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) FATAL: password authentication failed for user "senooken_kallithea"
p
パスワードを間違えた?yだと全削除になるからかな。nなら何も出なかった。
my.iniの指定がまずかった。
#sqlalchemy.url = postgresql://kallithea:password@localhost/kallithea sqlalchemy.url = postgresql://senooken_kallithea:WkiXF3w7d@localhost/senooken_kallithea
DBの指定も必要。
実行ログを見るといかが出ている。
/virtual/senooken/public_html/kallithea/venv/lib64/python3.6/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>. """)
インストールし直す。
pip install psycopg2-binary
実行し直し。
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) connection to server at "localhost" (::1), port 5432 failed: FATAL: password authentication failed for user "senooken_kallithea"
若干内容が変わる。ポート番号が怪しい。タイムオーバー。
https://chatgpt.com/c/67547095-c29c-800b-9530-650c7ff70756
KallitheaはCGI未対応。見送ったほうがいいかも。
古いデータを削除してインストールし直したら、postgresqlでセットアップ成功した。
pip install kallithea
--upgradeがあるのがまずかった模様。
インストールできたので起動。
gearbox serve -c my.ini
ただ、WSGIをFastCGIにうまくやる方法などは見つからない。phorge/fossil/kallithea/tracと試して最終的にfossilになる感じ。
Trac
https://chatgpt.com/c/67546eda-20ac-800b-b37f-7e8954c128f5
Demo: Trac Demo 1.4 (トップ画面の右上 [Try out our demos!])。
CGIで動作するリポジトリー統合のあるBTS。
デフォルトでは画面からリポジトリーは追加できない。設定ファイルの変更などで行う。
About
有名プロジェクト
Host
Install
TracInstall – The Trac Project
TracFastCgi – The Trac Project
tags/trac-1.6 の INSTALL.rst – The Trac Project
http s://chatgpt.com/c/675504b7-29c0-800b-bb09-5e8a24709488
- TracFastCgi – TogoRDF
- TracCgi – TogoRDF
- 1. 導入方法 — 苦労する遊び人の玩具箱 1 ドキュメント
- virtualenv上でtrac-gitを動かして見る。 - 目の前に僕らの道がある
「tags/trac-1.6 の INSTALL.rst – The Trac Project」を参考に取り組む。
Installing Trac
Directory
https://chatgpt.com/c/6763470f-c474-800b-90d1-33febab854bf
tracは複数プロジェクトを管理することができる。その場合、プロジェクト全体の共通リソースの参照などの都合があるので、プロジェクト全体の親ディレクトリーとしてtracを配置するのがよいと思われる。 以下のディレクトリー構成を踏襲する。
/var/www/trac/ ├── project/ # プロジェクト親ディレクトリー │ ├── project1/ # プロジェクト1 │ └── project2/ # プロジェクト2 └── venv/ # Python仮想環境 ├── bin/ ├── lib/ └── ... /var/www/trac.example.com/ +--trac 自分でcgi-bin/trac.fcgiのシンボリックリンクにするなど。このfcgiがvenvの実態で、プログラムでprojectディレクトリー内やDBの情報で応答する。 +--cgi-bin/ | +-- trac.fcgi +--htdocs +--common +--site
複数のtrac環境がある場合、プロジェクト名部分がURLで分かれる模様。
- PC: trac/project/project1/htdos/your_project_logo.png
- URL: /trac/project1/chrome/site/your_project_logo.png
プロジェクト別のリソース類は、URL上はproject1/chrome/siteになるが、実際のファイルはproject1/htdocsになる。公開ディレクトリーになくてもOK。
trac-admin deployすると、tracのファイル類を公開ディレクトリーにコピーしてくれる。
ただし、このコマンドはstandaloneサーバーで実行するなら不要。公開ディレクトリーはプロジェクトの共通リソース (htdocs) やcgi-binの配置などで使用する。
CGIスクリプトが、プロジェクト自体のデータ類は応答してくれる。1サーバーでの複数プロジェクト管理などする場合、trac.iniのhtdocs_dirやhtdocs_locationで指定すると、こちらの公開ディレクトリーのリソースを参照できる。指定しなかったら、プロジェクト環境内のファイルの参照になる。結果は同じだが、共通にしておくと効率は良い。
しなくても問題はない。
Install
インストーラーやOSのパッケージマネージャーを使う方法もある。公式の推奨はpipの模様。
pip3 install --user trac
レンタルサーバーのpip3を使うと以下のエラー。
PermissionError: [Errno 13] Permission denied: '/etc'
venvを挟む。
mkdir -p ~/public_html/trac cd ~/public_html/trac python3 -m venv --without-pip venv . venv/bin/activate curl https://bootstrap.pypa.io/pip/$(python3 -V | grep -o '[0-9].[0-9]')/get-pip.py -o get-pip.py python3 get-pip.py pip install --upgrade pip
pipの環境ができたのでtracをインストールする。
pip3 install trac
trac-1.6をこれでインストールできた。
必要な依存関係をインストールする。
trac-admin [project] initenv
プロジェクトディレクトリーとプロジェクト名の命名に悩む。
Tracはプロジェクトという単位で管理する。1個のプロジェクトに関連するリポジトリーを複数まとめることは可能。fossil同様設定ファイルなどで手動で管理する。が、サードパーティープラグインでWeb UIから追加も可能。デフォルトでも親ディレクトリーを指定することで、複数プロジェクトを想定した動作は可能。
例えば、gnusocial/GNU socialというような形。
initenvは後ろにプロジェクト名とdbを指定できる。
trac-admin <project> initenv [<project name> <db>]
[project]/conf/trac.iniの以下に反映される。
- <project name>=project.name
- <db>=trac.database (初期値=sqlite:db/trac.db)
https://chatgpt.com/c/67561e46-db8c-800b-80e8-b3f90bab4247
mysqlを使う場合、mysql:
mysql:host=localhost;port=3306;dbname=your_database_name
TracEnvironment – The Trac Project
DB文字列の書式
mysql://username:password@host:port/dbname
[:]区切りの部分は順不同の模様。
trac-admin gnusocial initenv 'GNU social' 'mysql://senooken_trac:password@localhost/senooken_trac';
localhostは省略不能。
tracのmysql対応が不十分の模様。
PyMySQLモジュールを使う
pip install PyMySQL
コマンドを実行したらいかが表示される。
Creating a new Trac environment at /virtual/senooken/public_html/trac/gnusocial Project environment for 'GNU social' created. You may configure the environment by editing the file: /virtual/senooken/public_html/trac/gnusocial/conf/trac.ini You can run the Trac standalone web server `tracd` and point your browser to http://localhost:8000/gnusocial. tracd --port 8000 /virtual/senooken/public_html/trac/gnusocial Navigate to "Help/Guide" to browse the documentation for Trac, including information on further setup (such as deploying Trac to a real web server). The latest documentation can also be found on the project website: https://trac.edgewall.org/
これでコマンドでローカルサーバーを起動できるようになっている。
Deploying Trac
Runnning the Stadaalone Server
以下のコマンドでローカルサーバーで起動。
tracd --port 8000 </path/to/myproject>
このあと [http://localhost:8000] で開ける。tracdが把握する全環境を表示して、/myprojectで該当プロジェクトを開ける。なお、プロジェクトが1個の場合-sをつけると/myprojectのパスがトップディレクトリーになる模様。
Running Trac on a Web Server
単独サーバーではなくWeb Server経由で実行することもできる。
FastCGIでの動作なら共用サーバーでも稼働可能。
Generating the Trac cgi-bin directory
CGI用のスクリプトはtrac-admin deplyコマンドで生成する。
trac-admin /var/trac/<project> deploy var/www ls /var/www
cgi-bin htdocs
chmod ugo+x /var/www/cgi-bin/*
cgi-bin/は以下がある。
trac.cgi trac.fcgi trac.wsgi
実手順。
cd ~/public_html/trac trac-admin gnusocial deploy .
ls cgi-bin get-pip.py gnusocial htdocs venv
htdocsにはcommon siteがある。
trac-admin gnusocial deploy .でhtdocs配下にプロジェクトファイル群が共通で格納される模様。このhtdocsをdocument rootの公開ディレクトリにシンボリックリンクを作成するとよさそう。
Mapping Static Resources
tracの主な2個の静的リソースのURLパスが/chrome/commonと/chrome/site。追加で/chrome/<plugin>
deployコマンドは以下のディレクトリーを作成する。
- common/: tracの静的リソース。
- site/: htdocsのコピー。
- shared: 複数のtracで共有する静的リソース。場所は[inherit].htdocs_dirで定義。
- <plugin>/
なお、静的リソースURLパスはtrac.iniで制御している
[trac] htdocs_location = http://static.example.org/trac-common/
上記設定に加えて以下のシンボリックリンク作成でchromeではなくtrac-commonを使える。
ln -s /path/to/trac/htdocs/common /var/www/static.example.org/trac-common
ここのパスがよくわからない。deployでtrac.gnusocial.jpを指定したほうがいいのかもしれない。
FastCGI
よくある質問 | サポート | レンタルサーバー CORESERVER(コアサーバー)
CORESERVERでFastCGIの実行。
/public_html/.fast-cgi-bin/ 内のphpXX.fcgiを編集。コントロールパネルのPHP設定でバージョンを指定。その後該当のphpXX.iniが対応公開ディレクトリーの処理スクリプトになる。
trac.fcgiをphp81.fcgiに改名して、その後バージョンをコントロールパネルからphp81にする。これでOK。
シンボリックリンクのほうがいいか。
cd ~/public_html cp php81.fcgi php81.fcgi.old ln -fns ../trac/cgi-bin/trac.fcgi php81.fcgi
これだとダメ。
ChatGPTに記載のあった.htaccessをtrac.gnusocial.jpに配置したらそれで動作した。CORESERVERのFastCGIはPHPのみの模様。
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /cgi-bin/trac.cgi/$1 [L]
これでtrac.gnusocial.jpを開くと開けた。
ただし、基本のURLパスが [https://trac.gnusocial.jp/cgi-bin/trac.cgi/timeline] のようにcgiのパスがつくようになる。
なんか違う気がする。
元々の.fast-cgi-bin/php81.fcgiにtrac.fcgiのシンボリックリンクを配置した後。trac.gnusocial.jpにindex.phpを配置したら動作した?パスにindex.phpが入るようになったが。
https://chatgpt.com/c/6758c79e-f2e4-800b-88e2-7eab678f03f2
CGIだとCGI用のパスが入るのはしかたない模様。
https://chatgpt.com/c/6758c79e-f2e4-800b-88e2-7eab678f03f2
リダイレクトして隠す。
RewriteEngine On RewriteRule ^app$ /cgi-bin/script.cgi [L]
上記設定により、example.com/app
というURLで cgi-bin/script.cgi
が動作します。
以下の.htaccessで/gnusocialにアクセスでFastCGIで動作する。
<FilesMatch gnusocial$> SetHandler fcgid-script </FilesMatch>
が、これだとgnusocial/chromeなどのリソースを配置できない。惜しい。別でやる方法があるのか?
TracFastCgi – The Trac Project
fcgiのスクリプト内でディレクトリーを環境変数で設定できる。
os.environ['TRAC_ENV_PARENT_DIR'] = "/path/to/project/parent/dir"
TRAC_ENV_PARENT_DIRかTRAC_ENVのどちらかがあればいい。複数プロジェクトを想定するなら、PARENT_DIRでOK。
「TracInstall – The Trac Project」にあるように、他にtrac.htdocs_locationで設定する。これがいいか。
https://chatgpt.com/c/6761f851-df0c-800b-86e9-1624b458d66d
FastCGIやCGIだと実際のアクセスパスは/cgi-bin/fast.cgiやfast.cgiなどのように、バイナリーのパスになる。これは回避不能。
としたら、画像類のパスはその下の階層にはできない。
/var/www/html/ ├── images/ │ ├── logo.png │ ├── background.jpg ├── css/ │ └── style.css ├── js/ │ └── script.js └── cgi-bin/ └── app.fcgi
こんな感じで、fast.cgiと同じか横になる。今回の場合、public_html/gnusocialとpublic_html/gnusocial-htdocsのような感じにする。これでOK。
TRAC_ENV_PARENT_DIR環境変数を設定すると、1個のFastCGIで複数プロジェクトを配置するだけで自動認識してくれる。
が、パス設定が少々ややこしくなる。
http://yourserver/trac/project1 のtracがfasccgiのファイルになる。
Permission system
TracPermissions – The Trac Project
デフォルトで未ログインユーザーはanonymousという名前のユーザー扱い。
SimpleMultiProject
TracMultipleProjects – The Trac Project
https://chatgpt.com/c/675504b7-29c0-800b-bb09-5e8a24709488
SimpleMultiProjectPlugin – Trac Hacks - Plugins Macros etc.
Tracはもともと単一プロジェクトの管理用だが、外部プラグインで複数プロジェクトの管理も可能。
一番開発が盛んで安定していそうなのが、SimpleMultiProjectPlugin
pip install TracSimpleMultiProject
これだと配置がわからない。ソースコードからダウンロードする。
curl -o simplemultiprojectplugin.zip https://trac-hacks.org/browser/simplemultiprojectplugin?rev=18669&format=zip
pip download TracSimpleMultiProject tar -xf TracSimpleMultiProject-*.tar.gz cd TracSimpleMultiProject-*/ python setup.py bdist_egg cp dist/TracSimpleMultiProject-0.7.4-py3.6.egg ../../gnusocial/plugins/ trac-admin gnusocial upgrade trac-admin "/virtual/senooken/public_html/trac/gnusocial" wiki upgrade
手順に従って、インストールしたが、プラグインのバージョンが古いのか動作しない。
しかたないので、最初から複数プロジェクトも対応したApache Bloodhoundを試す。
いや、Apache Bloodhoundは開発停止しているからやめたほうがいい。Tracで基本は単一プロジェクトで、OSGeoと同じで手作業でプロジェクトを分けたほうがいい。
Authentication
根本的な認証方法として、以下の2種類がある。
- Trac標準のHTTP認証
- AccountManagerPlugin
Tracの標準では、Basic/DigestのHTTP認証で管理者アカウントを認証して、後はユーザー設定などで管理する。
他に、AccountManagerPluginでフォーム認証できる。
プラグインでの認証のほうが融通が効いて扱いやすいのでこちらで行うと良い。
HTTP authentication
- TracAuthenticationIntroduction – The Trac Project
- TracFastCgi – The Trac Project
- TracModWSGI – The Trac Project
「TracAuthenticationIntroduction – The Trac Project」が一番まとまっている模様。
インストール後、管理者アカウントを作らないとログインできない。
インストール方法別に、認証方法がある。
基本的な考え
- サイト全体の認証
- 一部の認証=各プロジェクトの/loginにのみHTTP認証が必要。
- Basic認証: パスワードをBase64で送信。HTTPSで送信すれば盗聴はされないが、生のパスワードを残す。ただし、シンプル。
- Digest認証: パスワードをハッシュ関数で暗号化する。主にHTTPを使えない環境用。
Digest認証でやる。
htdigest -c /path/to/.htdigest TracRealmName UserName htdigest -c .htdigest TracRealmName admin
.htaccessに以下の内容を記入する。
cd ~/public_html/trac.gnusocial.jp cat <<-'EOT' >>.htaccess AuthType Digest AuthName "TracRealmName" AuthDigestProvider file AuthUserFile /virtual/senooken/public_html/trac/.htdigest Require valid-user EOT
コマンドで管理者アカウントを作ってやる感じだと思う。
# trac-admin /path/to/myproject permission add admin TRAC_ADMIN trac-admin gnusocial permission add admin TRAC_ADMIN
これでtrac.gnusocial.jpを開くとWebブラウザーのログインダイアログが表示されて、adminでログインできる。
ログアウトは [任意の文字@domain] でWebブラウザーにアクセスするとできるらしい (Basic認証のキャッシュを削除する(ログアウトする) | DevelopersIO)。
複数プロジェクトでの認証設定方法がいくつかある。
1点目は、/tracに設定する。ただし、この方法はanonymousユーザーの閲覧を拒絶する。非公開サービスならいいのだけど。
2点目はhttpd.confを使える場合、以下のようにLocationMatchで各プロジェクトの/loginに設定する。共用サーバーだと無理。
<LocationMatch "/projects/[[:alnum:]]+/login"> AuthType Basic AuthName "trac" AuthUserFile /path/to/trac.htpasswd Require valid-user </LocationMatch>
3点目はプロジェクトごとの/loginに設定する。これが無難か。
4点目、1点目+3点目。/tracで認証設定するが、anonymousユーザーの閲覧を許可する。
AccountManagerPlugin
Install
pip install TracAccountManager
インストール後の設定は [CookBook/AccountManagerPluginConfiguration – Trac Hacks - Plugins Macros etc.] を参考にする。「AccountManagerPlugin/Modules – Trac Hacks - Plugins Macros etc.」も情報源。
AMPの認証方式が4種類ある (AccountManagerPlugin/AuthStores – Trac Hacks - Plugins Macros etc.)。
- PasswordFileStores
- HtDigestStore: htdigestファイル形式でパスワードを保存。
- HtPasswdStore: htpasswd形式で保存。
- HttpAuthStore: 認証をWebサーバーに移譲。LDAPなどの組み合わせでアクセスを制御可能。ただし、ユーザーの一覧表示、追加、削除、パスワード変更に未対応。
- SessionStore: パスワード情報をDBに保存。ユーザーが多数いてパスファードファイルへの書き込み競合エラーが起こるならこれ。
- SvnServePasswordStore: tracユーザーに加えて、SVNユーザーも使用可能にする。
https://chatgpt.com/c/6763470f-c474-800b-90d1-33febab854bf
SessionStoreでいい気がする。DBに保存しておくのが一番。
trac.iniに以下を記述する。
[account-manager] hash_method = HtDigestHashMethod db_htdigest_realm = TracDB password_store = SessionStore reset_password = false
[components] acct_mgr.admin.* = enabled acct_mgr.api.* = enabled acct_mgr.db.sessionstore = enabled acct_mgr.htfile.* = disabled acct_mgr.http.* = disabled acct_mgr.notification.* = enabled acct_mgr.pwhash.htdigesthashmethod = enabled acct_mgr.pwhash.htpasswdhashmethod = disabled acct_mgr.register.* = enabled acct_mgr.svnserve.svnservepasswordstore = disabled acct_mgr.web_ui.* = enabled acct_mgr.web_ui.resetpwstore = disabled trac.web.auth.loginmodule = disabled
この状態でWebブラウザーでtracの画面 (https://trac.gnusocial.jp/trac/gnusocial/) を開き [Login] を選ぶ。
Wizard
自動でログインして、初回登録時の設定画面 (Accounts: Configuration) が表示されるので、順番に初回設定する。
特に重要な設定だけ記載する。
- Step 1
- Authentication Frond-end=[◎Use a HTML login form backed by one or more password stores managed by AccountManagerPlugin.]: これを選ぶことでプラグインのフォーム認証を使う。
- 上記以外は初期値のままでも問題はない。
- Step 6: 初期管理者アカウントを作成する。TRAC_ADMIN権限を保有するアカウントを1個作る。adminなどの専用ユーザーにするとよい。
最後に [Apply changes] で完了。
Component
AMPはいくつかの部品から構成されており、それぞれの部品の設定で機能を変更できる。
特に重要なのは以下。
- AccountManagerAdminPanel
- AccountGuard
- RegistrationModule
- EmailVerificationModule
Repository
TracRepositoryAdmin – The Trac Project
インストールの最後の手順にリポジトリーの設定がある。
以下の流れで設定する。
- コンポーネントの有効化
- リポジトリーを追加。
Enabling the components
VCSサポートは同梱されているが、デフォルトでは無効になっており、明示的に有効化が必要。
trac.iniに以下を記載するか、プラグイン管理ページからも有効にできる。
tracopt.versioncontrol.svn.* = 有効 tracopt.versioncontrol.git.* = 有効
Web UIだと以下があった。
- tracopt.versioncontrol.git.git_fs.*
- CsetPropertyRenderer
- GitConnector
- GitwebProjectsRepositoryProvider
管理画面場は全項目が表示されている。全部チェックする。gitは「TracGit – The Trac Project」が公式情報源。だが、細かい設定の説明はない。
GitConnectorに (最低限) チェックすると、管理画面の左下に [Version Control] が登場する。
Specifying repositories
tracは環境ごとに複数のリポジトリーに対応している。リポジトリーごとに異なるVCSでも問題ない。
Default Repository
tracのリポジトリーは[Browse Source]の[Repository Index]で一覧される。デフォルトリポジトリーが最初に表示される。パス指定のないリポジトリー名 ([1/repos1]ではなく[1]の形式) のTrackLinks (trac内の自動ハイパーリンク機能) はデフォルトリポジトリーを参照する。
[Repository Admin] ページで、デフォルトリポジトリーは [Name] 属性を空にすることで指定する。コマンドラインで指定する場合、(default)か""で指定する。TracIniでは .dir = /path/to/dirのように、{name}.{attbitute}の{name}を空にする。
Repository Attributes
リポジトリーは以下の属性の定義が必須。
- name属性
- aliasかdir属性
他にもあるが、それらは任意。
Attbitute | Description |
---|---|
alias | 実リポジトリーのエイリアス。aliasとdirは二者択一で必須。既存の他のnameを指定して別名で流用する。既存のリポジトリーを別名で参照したい場合などに使用。あまり使わないか。 |
cached | |
description | |
dir | ファイルシステム上のリポジトリー位置を指定。aliasとdirは二者択一で必須。 |
hidden | |
name | リポジトリー名。必須。 |
In the database
リポジトリーはデータベース内でも指定できる。管理ページの [Version Control]-[Repositories]か、trac-admin $ENV repositoryコマンドで行う。trac.iniで定義されたリポジトリーは表示されるが、編集不能。
管理画面から追加・編集してDBで管理するのが楽な気がする。
In trac.init
リポジトリーとリポジトリー属性はtrac.iniの[repositories]セクションでも指定できる。
- 利点: DBでの登録と異なり、global configurationから設定を継承できる点。
- 欠点: trac.iniのパーサーの都合でリポジトリー名が常に小文字になる。
リポジトリー名に制約が生じるので使わなくていい気がする。
In GitWeb
Gitには同梱されるWebベースのビューアーのGitWebがある。Tracはgitwebで使用するproject.listsを読み込める。trac.iniの[gitweb-repositories]で設定する。
[gitweb-repositories]
projects_base
|
git プロジェクトのベースディレクトリのパスを指定します。 | (デフォルトなし) |
projects_list
|
gitweb 形式の projects.list ファイルへのパスを指定します。 | (デフォルトなし) |
projects_url
|
プロジェクト URL のテンプレート。%s はリポジトリ名に置換されます。
|
(デフォルトなし) |
sync_per_request
|
リクエストごとに同期を行うリポジトリを指定します (非推奨)。 | (デフォルトなし) |
Repository synchronization
明示的、暗黙的な2種類の同期が可能。
Explicit synchronization
推奨される同期方法。リポジトリーのpost-commitにtrac-adminの呼び出しが必要。また、リポジトリーがリビジョンメタデータの変更を許可するなら、post-revprop-changeフックにもtrac-adminの呼び出しが必要。
Per-request synchronization
暗黙な同期方法。非推奨。post-commitフックが利用できない場合に使う。
trac.iniとDBのリポジトリーごとのsync_per_requestをtrueにする。
フックが呼ばれないので、変更セットの追加、変更イベントに依存するプラグインはうまく動作しない。例えば、[automatic changeset references]は使用不能。
Automatic changeset references in tickets
変更がリポジトリーにコミットされるたびに、コミットへの参照をチケットコミットに自動追加できる機能がある。参照の自動追加はコミットメッセージに以下のいずれかのパターンが条件。
- Refs #123 #123チケットでこの変更を参照。
- Fixes #123 デフォルトステータス [fixed] の#123チケットでこの変更を参照して終了する。
この機能はpost-commitフックの設置が必要で、以下の設定が必要。
tracopt.ticket.commit_updater.* = enabled
詳細は CommitTicketUpdater (CommitTicketUpdater – The Trac Project) にある。
Plugin
- PluginList – The Trac Project: 公式で紹介されているプラグインリスト。
- Trac Hacks - Plugins Macros etc.=Tracのプラグインのホスティングサイト?「Trac で複数のプロジェクトを扱う」で知る。
- TracPlugins – The Trac Project
- TracPlugins – Trac Hacks - Plugins Macros etc.
Detection
tracのプラグインは以下のどちらか。
- 単一ファイル (.py)
- パッケージ (.egg/.whl)
tracでは、プラグインを以下から検索する。
- Pythonのsite-packagesディレクトリー
- グローバル共有plugins
- プロジェクトのplugins
プロジェクトのtrac.initの[components]で明示的に無効にしない限り、有効になる。上記以外にインストールした場合、[components]で明示的に有効化が必要。
Install
単一プロジェクトとプロジェクト全体とでインストール方法が若干異なる。
All project
pipでインストールする。
グローバルにインストールしたプラグインは、trac.iniのcomponentsで明示的に有効化が必要。なお、Webの管理画面からもオン・オフ可能。
なお、プラグインの検知には、再起動が必要。
プラグインのインストール結果は、trac-admin plugin listで確認できる。
trac-admin /path/to/trac/environment plugin list
Apache Bloodhound
Apache Bloodhound - Apache Attic
2024-07に完全に終了。
https://gnusocial.jp/notice/8176358
うーん。開発停止しているなら諦めて、tracで1プロジェクトで複数リポジトリーを管理する方式でいいと思う。その際に、/gnusocialのパスにして、今後マルチプロジェクトも対応可能な余地を残す。