「VCS」の版間の差分
(Plugin) |
|||
731行目: | 731行目: | ||
プロジェクトディレクトリーとプロジェクト名の命名に悩む。 | プロジェクトディレクトリーとプロジェクト名の命名に悩む。 | ||
Tracはプロジェクトという単位で管理する。1個のプロジェクトに関連するリポジトリーを複数まとめることは可能。fossil同様設定ファイルなどで手動で管理する。が、サードパーティープラグインでWeb | Tracはプロジェクトという単位で管理する。1個のプロジェクトに関連するリポジトリーを複数まとめることは可能。fossil同様設定ファイルなどで手動で管理する。が、サードパーティープラグインでWeb UIから追加も可能。デフォルトでも親ディレクトリーを指定することで、複数プロジェクトを想定した動作は可能。 | ||
例えば、gnusocial/GNU socialというような形。 | 例えば、gnusocial/GNU socialというような形。 | ||
754行目: | 754行目: | ||
DB文字列の書式 | DB文字列の書式 | ||
mysql://username:password@host:port/dbname | mysql://username:password@host:port/dbname | ||
[:]区切りの部分は順不同の模様。 | [:]区切りの部分は順不同の模様。 | ||
761行目: | 760行目: | ||
[https://kiban.dbcls.jp/togordf/wiki/TracInstall TracInstall – TogoRDF] | [https://kiban.dbcls.jp/togordf/wiki/TracInstall TracInstall – TogoRDF] | ||
tracのmysql対応が不十分の模様。 | tracのmysql対応が不十分の模様。 | ||
767行目: | 767行目: | ||
[https://trac.edgewall.org/wiki/MySqlDb MySqlDb – The Trac Project] | [https://trac.edgewall.org/wiki/MySqlDb MySqlDb – The Trac Project] | ||
pip install PyMySQL | pip install PyMySQL | ||
コマンドを実行したらいかが表示される。 | コマンドを実行したらいかが表示される。 | ||
791行目: | 790行目: | ||
<nowiki>https://trac.edgewall.org/</nowiki> | <nowiki>https://trac.edgewall.org/</nowiki> | ||
これでコマンドでローカルサーバーを起動できるようになっている。 | これでコマンドでローカルサーバーを起動できるようになっている。 | ||
1,023行目: | 1,021行目: | ||
* [https://zenn.dev/matobaa/articles/trac_16_on_docker Trac 1.6 を Docker で建てる] | * [https://zenn.dev/matobaa/articles/trac_16_on_docker Trac 1.6 を Docker で建てる] | ||
* [https://trac-hacks.org/wiki/AccountManagerPlugin AccountManagerPlugin – Trac Hacks - Plugins Macros etc.] | * [https://trac-hacks.org/wiki/AccountManagerPlugin AccountManagerPlugin – Trac Hacks - Plugins Macros etc.] | ||
pip install TracAccountManager | |||
インストール後の設定は [[https://trac-hacks.org/wiki/CookBook/AccountManagerPluginConfiguration CookBook/AccountManagerPluginConfiguration – Trac Hacks - Plugins Macros etc.]] を参考にする。「[https://trac-hacks.org/wiki/AccountManagerPlugin/Modules AccountManagerPlugin/Modules – Trac Hacks - Plugins Macros etc.]」も情報源。 | |||
AMPの認証方式が4種類ある ([https://trac-hacks.org/wiki/AccountManagerPlugin/AuthStores 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 | |||
=== Plugin === | === Plugin === | ||
1,050行目: | 1,085行目: | ||
pipでインストールする。 | pipでインストールする。 | ||
グローバルにインストールしたプラグインは、trac.iniのcomponentsで明示的に有効化が必要。なお、Webの管理画面からもオン・オフ可能。 | |||
なお、プラグインの検知には、再起動が必要。 | なお、プラグインの検知には、再起動が必要。 | ||
プラグインのインストール結果は、trac-admin plugin listで確認できる。 | |||
trac-admin /path/to/trac/environment plugin list | |||
== Apache Bloodhound == | == Apache Bloodhound == |
2024年12月21日 (土) 15:30時点における版
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で動作しない。
Git
Commit
マージコミット後のコミット追加
マージコミット後に次の開発作業を始めることが多い。が、直後の初回のコミットを追加したい場合困る。
git rebase -iにすると、コミットが残るから。編集はできるが、その直前にコミットの追加ができない。マージコミットは扱いが特殊で直接rebaseで編集できない。
しかたないので、該当コミットでブランチを作成して、コミット。その後、既存の修正ブランチをrebaseでそのコミットの後にくっつける。これでいける。
コミットオプション
Git - git-commit Documentation
コミットメッセージ指定のためのオプションがある。
- -m|--message <message>: コミットを文字列で指定。複数指定可能で、その場合段落で区切ってくれる。2行目以後を書きたい場合などで使う。
- -C|--reuse-message <commit>: 指定したコミットのコミット情報を再使用する。
- -c|--reedit-message <commit>: -Cの同じだが、編集画面を表示してコミットメッセージを編集して再使用する。
- -F|--file=<file>: 指定したファイルをコミットメッセージに使う。-を指定すると標準入力を使う。
基本は-m。-mの複数指定。
過去コミットのメールアドレスの変更
- How can I change the author (name / email) of a commit? | Learn Version Control with Git
- Gitのcommitの名前やメールアドレスを過去からまとめて変更する
単一コミットのメールアドレスを指定する場合、commitに--authorを指定する。
git commit --author="John Doe <john@doe.org>"
--amendと併用することで、過去コミットも変更できる。
数が少ないなら、rebase -iで1個ずつamendする。数が多いならfilter-branch。
第一コミットの変更
- [Git 最初のコミットを含めてrebase -iする方法 | DevelopersIO]
- Git - git-rebase Documentation
通常、第一コミットはammend以外では変更できない。
rebase --root [branch] でブランチの第一コミットも参照して改変可能。
マージコミットの打ち消し
マージコミットは扱いがやや特殊。
git revert -m 1 マージコミット git reset --hard HEAD~1 # マージコミット前
どちらか。
stash
復元
Git Stashの復元: 誤って削除されたスタッシュの復元方法 #Git-Stash - Qiita
git stash drop実行時に、削除したコミットのSHA1が表示される。
そのSHA1をapplyで指定すれば、取り込める。
git stash apply [stash_hash]
リモート
gitの不要なブランチを消すコマンド #Git - Qiita
git fetch -p/--prune
リモートの削除済みブランチをローカルに同期する。
リモートの最新タグ
https:/stackoverflow.com/questions/20734181/how-to-get-list-of-latest-tags-in-remote-git
git ls-remote --tag --sort=taggerdate
date関係のsortはオブジェクトへのアクセスが必要なので、ローカルにないとダメとか。
https:/git-scm.com/docs/git-ls-remote.html
https:/stackoverflow.com/questions/10649814/get-last-git-tag-from-a-remote-repo-without-cloning
git rev-listでいけそう。
https:/gist.github.com/rponte/fdc0724dd984088606b0
差分ファイル抽出
情報源: gitで差分ファイルを抽出する #Git - Qiita。
git archiveとgit diffを組み合わせる。
git archive --format=zip --prefix=root/ HEAD `git diff --diff-filter=d --name-only HEAD^ HEAD` -o archive.zip
ただし、この方法はファイル数がARG_MAX以下の場合だけ。ファイル数が多い場合だめ。
git diff --name-onlyで一覧を出力させて、1個ずつcp -pで階層を維持してコピーするしかないかも?
例:
mkdir -p archive git diff --name-only new_base 44765_upgrade-base-version | xargs -i cp -p --parent "{}" archive/
core.autocrlf
warning: in the working copy of 'docker/README.md', LF will be replaced by CRLF the next time Git touches it
Windowsでは改行にCR+LFを使うが、mac/LinuxはLFのみ。これの違いの処理のための設定がcore.autoclrlf
- true=コミット時にCRLFをLFに自動変換。チェックアウト時に逆。Windows向けの設定。
- false=変換しない。
- input=コミット時にCRLFをLFに自動変換のみ。mac/Linux向け。Windowsではチェックアウト時にCRLFになるが、mac/LinuxはLFになる。
わかりにくい。基本はfalseで良いと思われる。
gitkの文字化け対策
gitkのエンコーディングを設定する - Pistolfly
gitkはシステムのデフォルトエンコーディングで表示しようとするので、文字エンコーディングを指定しておく。
git config --global gui.encoding utf-8
ファイル名などの文字化け対策
Git for Windows で日本語を使いたい #Vim - Qiita
git config --global core.quotepath false git config --global gui.encoding utf-8
改名と修正
改名と修正を同時にすると、改名を検知できない。
-Mオプションを指定すると、類似度で同時も検知できる。が、基本はリネーム・改名と修正は別コミットにしたほうがよさそう。
差分無視
git diffの--ignoreオプションにおけるスペース、タブ、改行の扱いを理解する #Git - Qiita
-wでインデント違いを無視してくれる。
squash
squashすると、squash対象コミットが、対象の直前のコミットに含められる。
gitignore
Format
記述方法を整理する。
- 空行は無視。
- #始まりの行はコメント扱い。
- 終端スペースは無視。
- !接頭辞はパターン否定。つまり、除外ではなく含める。以前除外された一致を再び含める。ただし、親ディレクトリーが除外されている場合、以下のファイルは含められない。パフォーマンス上の理由。順番に注意する。
- /はディレクトリー区切りとして使用。先頭、中間、末尾で登場する。
- 先頭と中間の/は相対パスを意味する。
- それ以外、末尾の/と/なしの場合、現在以下のディレクトリーにもマッチする。
- 末尾が/で終わる場合、ディレクトリーのみに一致。/がない場合、ディレクトリーとファイルの両方に一致。
- *は/以外にマッチ。?は/以外の任意の1文字にマッチ。[a-zA-Z] の範囲記法も使用可能。fnmatch(3) FNM_PATHNAMEフラグのパス名展開に準じる。
- **は特殊な意味がある。
- **/=全ディレクトリー。**/fooは配下の全fooにマッチ。**/foo/barはfoo以下の全barにマッチ。
- /**=配下のすべてにマッチ。
- a/**/b=a/b a/x/b a/x/y/bのすべてにマッチ。
後は特に明記がないが、上から順番に評価されて、最後のマッチが優先されるので、記述の順番に注意する。
反転の!と/の扱いに特に注意が必要。
先頭スラッシュをつけないと、再帰的になる。
$ cat .gitignore # ディレクトリ foo/bar 以外のすべてを除外 /* !/foo /foo/* !/foo/bar
空ディレクトリーの維持
How do I add an empty directory to a Git repository? - Stack Overflow
gitは空ディレクトリーを履歴管理できない。何かファイルが必要。
logなど維持したい空ディレクトリーに、以下の内容の.gitignoreを置く。
!.gitignore
.gitignore以外を無視する。これで.gitignoreのみがあるので管理できる。
指定ファイルのみ除外
* !.gitignore
ディレクトリーを残す以外 (.gitignore1ファイル以外) に、サンプルファイルなど複数ファイルを残したい場合は、上記のように*で最初に全部除外して指定ファイルのみ含める。/は必要に応じてつける。
gitattributes
Git - gitattributes Documentation
gitignoreに似ていて、パターンにマッチしたパスに対する設定を行える。
- text
- eol
- working-tree-encoding
- ident
- filter
- diff
- merge
- conflict-marker-size
- whitespace
- export-ignore: git archiveなどに含めないことをマーク。
- export-subst
- delta
- encoding
ファイルのインデックスのみ削除
git rmは単独だと、gitの履歴とローカルファイルからも削除する。追跡対象から削除のみで、ローカルファイルとして残したい場合、--cachedを指定する。
git rm --cached
gitk
problem
ブランチ名が長いと、右クリックしにくい
submodule
https://git-scm.com/docs/git-submodule
foreach
サブモジュールの全部を一括処理する。
foreach [--recursive] <command>
<command>部分では$sm_pathでパスを参照できる。
git submodule foreach 'echo $sm_path `git rev-parse HEAD`'
Entering 'XXX' XXX hash
submoduleの中に入ってから実行することに注意する。
便利なコマンド。
git submodule foreach 'git reset --hard'
Other
他のブランチとの同一化
git diff HEAD master | patch -p 1
patchの他にgit applyでもいい。
.netrc
https://social.senooken.jp/conversation/1573147#notice-2217499
Gitのパスワード入力の省略方法に~/.netrcがある。
しかし、man netrcするとわかるけど、これはもともとFTPのためのもの。なぜGitで使えるんだ?Gitの文書で言及がない。
In conversation Thursday, 21-Feb-2019 10:58:47 JST from web permalink
せのお (妹尾 賢)せのお (妹尾 賢) in reply to
理由が分かった。
1. Gitはhttpとhttpsの通信にcURLを使っている。
https://github.com/git/git/blob/master/INSTALL#L141
2. cURLが.netrcにも対応しているから。
https://ec.haxx.se/usingcurl-netrc.html
GitHub
Account
Username may only contain alphanumeric characters or single hyphens, and cannot begin or end with a hyphen.
ユーザー名は、英数字と-のみが使用可能。
組織別にアカウントを分けるなら、かぶらないように末尾に-組織名のようなサフィックスがあるとよいだろう。
Fossil
外部依存を排除しており、CGIでも動作するという点が非常に良い。気になる。Phorgeの検討が不要になる。
Fossil: A Coherent Software Configuration Management System
いくつか癖があるので注意する。
https://chatgpt.com/c/674e38de-a8c0-800b-8991-e0d68a2f0d86
複数のリポジトリーを取り扱うことは可能。ただし、Web UI上からリポジトリーの新規作成はできない。リポジトリーの新規作成はあくまでコマンドラインから行う必要がある。ここは集中的。
git と fossil の比較 git vs fossil-scm | タイトル
完全に個人なら悪くないが、コマンドの操作体系も異なるし、ややリスクがある。Tracのほうが無難。
Install
Binary
Fossil: A Coherent Software Configuration Management System
ソースコードからコンパイルするか、コンパイル済みバイナリーを配置するだけ。
VER=2.25 mkdir -p ~/.local/stow/fossil-$VER ~/.local/bin cd ~/.local/stow/fossil-$VER curl -O https://fossil-scm.org/home/uv/fossil-linux-x64-$VER.tar.gz tar -xf fossil-$VER.* ln -fns ../stow/fossil-$VER/fossil
Server
CGIで実行するにはいくつか手順がある。
CGIディレクトリーに以下の内容のCGIスクリプトを用意する。
#!/usr/bin/fossil repository: /home/fossil/repo.fossil
repositoryの部分は指定方法がいろいろある。単一リポジトリーのホストなら上記でいいが、複数のリポジトリーを取り扱いたければ、リポジトリー群の格納ディレクトリーをdirectory: で指定する。
また、リポジトリーが不在の場合のリダイレクト先を指定するnotfound:もある。
#!/usr/bin/fossil directory: /home/fossil/repos notfound: http://url-to-go-to-if-repo-not-found/
CGIスクリプトをcgi-bin/repoとした場合、展開後は [http: //mydomain.org/cgi-bin/repo/XYZ] のようなURLで [/home/fossil/repos/XYZ.fossil] にアクセス可能。
CGIで展開されると。
fossil.cgiにする。
https://chatgpt.com/c/674e38de-a8c0-800b-8991-e0d68a2f0d86
fossilのweb uiではリポジトリーの新規作成ができない。新規作成だけはコマンドラインから行う必要がある。これだけがいまいち。保留。
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
なんかエラーが出る。
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未対応。見送ったほうがいいかも。
Trac
https://chatgpt.com/c/67546eda-20ac-800b-b37f-7e8954c128f5
Demo: Trac Demo 1.4 (トップ画面の右上 [Try out our demos!])。
CGIで動作するリポジトリー統合のあるBTS。
デフォルトでは画面からリポジトリーは追加できない。設定ファイルの変更などで行う。
About
有名プロジェクト
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.example.com ├── trac/ # プロジェクト親ディレクトリー │ ├── project1.git/ # プロジェクト1のGitリポジトリ │ └── project2.hg/ # プロジェクト2のMercurialリポジトリ ├── static/ # 静的ファイル(JavaScript, CSS, 画像など) │ ├── css/ │ ├── js/ │ └── img/ └── venv/ # Python仮想環境 ├── bin/ ├── lib/ └── ...
複数のtrac環境がある場合、プロジェクト名部分がURLで分かれる模様。
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" # AuthDigestDomain /trac 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
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
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のパスにして、今後マルチプロジェクトも対応可能な余地を残す。