「GNU social JP Fossil」の版間の差分
Gnusocialjp (トーク | 投稿記録) (新規作成。) |
Gnusocialjp (トーク | 投稿記録) (Download暫定版。) |
||
(同じ利用者による、間の8版が非表示) | |||
1行目: | 1行目: | ||
[[Category:GNU social]] | [[Category:GNU social]] | ||
==About== | |||
== About == | |||
GNUプロジェクトのソースコードのホスティングには、フリーソフトを使用したサービスしか使用できない。 | GNUプロジェクトのソースコードのホスティングには、フリーソフトを使用したサービスしか使用できない。 | ||
それもあって、リポジトリーを自己ホストするために調査した。 | それもあって、リポジトリーを自己ホストするために調査した。 | ||
* phorge | *phorge | ||
* trac | *trac | ||
* kallithea | *kallithea | ||
* fossil | *fossil | ||
上記4ソフトのインストール・動作を2024-12に検証 (https://gnusocial.jp/notice/8089277) して、その結果fossilに決めた。fossslが唯一以下を満たした。 | 上記4ソフトのインストール・動作を2024-12に検証 (https://gnusocial.jp/notice/8089277) して、その結果fossilに決めた。fossslが唯一以下を満たした。 | ||
* CGIで動作 | *CGIで動作 | ||
* リポジトリーと管理UIの統合 | *リポジトリーと管理UIの統合 | ||
Tracもインストールはできたが、これはBTS機能のみで、リポジトリー自体のホスティングはgitwebやcgitなど別サービスが必要だった。2個に分かれるのが面倒くさい。 | Tracもインストールはできたが、これはBTS機能のみで、リポジトリー自体のホスティングはgitwebやcgitなど別サービスが必要だった。2個に分かれるのが面倒くさい。 | ||
21行目: | 19行目: | ||
FossilはSQLiteの著者が管理するプロジェクト。Gitが使いにくいと思っており、そこをうまく解消している。さすがのプロジェクト。 | FossilはSQLiteの著者が管理するプロジェクト。Gitが使いにくいと思っており、そこをうまく解消している。さすがのプロジェクト。 | ||
== | ==Install== | ||
=== Condition === | |||
wiki.gnusocial.jpなどをホストしているCORESERVERに追加する形でインストールする。 | |||
* ドメイン=fossil.gnusocial.jp | |||
* ホスティングサービス=CORESERVER | |||
* 方式=CGI | |||
* Web Server=Apache HTTP Server 2.4.37 | |||
* OS=GNU/Linux | |||
なお、「 [https://fossil-scm.org/home/doc/tip/www/server/ Fossil: How To Configure A Fossil Server]」に記載があるように、Fossil自体はFastCGI/SCGI/単独サーバーに対応している。ただ、FastCGIはOpenBSDのhttpd専用。残り2個は常駐プロセスで共用サーバーでは安定稼働できないのでCGIを選ぶ。 | |||
=== Binary === | |||
情報源=[https://fossil-scm.org/home/doc/trunk/www/index.wiki Fossil: A Coherent Software Configuration Management System] | |||
インストールに先立って、fossilのバイナリーを取得する。 | |||
ソースコードからコンパイルするか、コンパイル済みバイナリーを配置するだけ。設置先の共用サーバーにログインして、以下のコマンドを実行する。 | |||
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-2.25.tar.gz https://fossil-scm.org/home/uv/fossil-linux-x64-$VER.tar.gz] | |||
tar -xf fossil-$VER.* | |||
ln -fns ../stow/fossil-$VER/fossil ../../bin/ | |||
.bashrcなどに以下を記入して、PATHを設定しておく。 | |||
export PATH="$PATH:~/.local/bin" | |||
=== CGI === | |||
情報源 | |||
* [https://fossil-scm.org/home/doc/tip/www/server/any/cgi.md Fossil: Serving via CGI] | |||
* [https://fossil-scm.org/home/doc/tip/www/cgi.wiki Fossil: CGI Script Configuration Options] | |||
バイナリーを取得したので、CGIで動作させるために設定する。 | |||
ディレクトリー構成は以下とする。 | |||
* public_html | |||
** fossil: fossilリポジトリーの格納場所。 | |||
** fossil.gnusocial.jp: 公開ディレクトリー。 | |||
*** .htaccess | |||
*** fossil: FossilのCGI。 | |||
*** index.html | |||
以下のコマンドでディレクトリーを作ってCGIファイルなどを配置する。 | |||
mkdir -p ~/public_html/fossil ~/public_html/fossil.gnusocial.jp | |||
cd ~/public_html/fossil.gnusocial.jp | |||
cat <<-'EOT' >.htaccess | |||
<FilesMatch fossil$> | |||
SetHandler cgi-script | |||
</FilesMatch> | |||
EOT | |||
cat <<-EOT >fossil | |||
#!$HOME/.local/bin/fossil | |||
directory: $HOME/public_html/fossil | |||
notfound: /fossil | |||
repolist | |||
EOT | |||
cat <<-'EOT' >index.html | |||
<!DOCTYPE html> | |||
<nowiki><html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"></nowiki> | |||
<head> | |||
<meta charset="UTF-8" /> | |||
<meta name="author" content="SENOO, Ken" /> | |||
<title>GNU social JP Fossil</title> | |||
</head> | |||
<body> | |||
<nowiki><h1>GNU social JP Fossil</h1></nowiki> | |||
<main> | |||
<section> | |||
<nowiki><h1>About</h1></nowiki> | |||
<nowiki><p>This site hosts GNU social fossil repositories.<p></nowiki> | |||
</section> | |||
<section> | |||
<nowiki><h1>Link</h1></nowiki> | |||
<nowiki><ul></nowiki> | |||
<nowiki><li><a href="fossil">fossil</a></nowiki>: repository list.<nowiki></li></nowiki> | |||
<nowiki><li><a href="fossil/gnusocial">fossil/gnusocial</a></nowiki>: GNU social main repository<nowiki></li></nowiki> | |||
<nowiki></ul></nowiki> | |||
</section> | |||
</main> | |||
</body> | |||
<nowiki></html></nowiki> | |||
index.htmlは仮。必要になったタイミングで、内容やスタイルを改良する。 | |||
これで一旦稼働する。 | |||
* https://fossil.gnusocial.jp/ | |||
* https://fossil.gnusocial.jp/fossil | |||
あとはFossilリポジトリーの用意。 | |||
=== Repository === | |||
* [https://fossil-scm.org/home/doc/trunk/www/inout.wiki Fossil: Import And Export] | |||
Fossil自体の用意はできたので、public_html/fossilにリポジトリーを配置する。GitからFossilへの変換が必要となる。 | |||
この作業は緊張する。 | |||
# git cloneでgitリポジトリーをローカルに取得。 | |||
# fossilに取り込む。 | |||
共用サーバーで作業する場合、インポートに時間がかかって、処理が中断する可能性が高い。 | |||
この作業はインポートの初回だけなので、コミット履歴が1000以上の膨大な場合、ローカルパソコンで作業して、インポート完了後のsqliteファイルだけ転送した方が確実。 | |||
まず以下のコマンドでgitリポジトリー全体を取得する。 | |||
git clone --depth 1 https://notabug.org/gnusocialjp/gnusocial | |||
cd gnusocial | |||
git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*' | |||
git fetch --unshallow | |||
cd .. | |||
以下のコマンドでgitリポジトリーをFossilリポジトリーに変換する。 | |||
git -C gnusocial fast-export --all | fossil import --git gnusocial.fossil | |||
実行が完了すると以下が表示される。 | |||
project-id: 6ebf1a799a9d9fd8fcb55a9a6c816fadcc2e0e4f | |||
server-id: e45ff282026d409ea80f78f6d1ea62d663b31dda | |||
admin-user: password is "password" | |||
sh -c 451.82s user 27.95s system 96% cpu 8:16.84 total | |||
このパスワードが管理画面の初期パスワードなので重要。保存しておく。gnusocial.fossilのサイズは225MBだった。 | |||
作成したgnusocial.fossilを共用サーバーの~/public_html/fossilに配置する。[https://fossil.gnusocial.jp/fossil/gnusocial/index<nowiki>] でアクセスできる。</nowiki> | |||
この後、Fossilの設定をいろいろ行う。特に重要なのがダウンロードページの作成。このページの作成が、composerなどの外部パッケージの配布などと密接に絡んでくるので重要。 | |||
後は、GNU social関係のプロジェクトのアーカイブもしたい。 | |||
* plugin | |||
* theme | |||
* tool | |||
上記の3ディレクトリーでサードパーティーのツール類を全部取り込んでここで一元管理したい。 | |||
== Other == | |||
=== Download === | |||
* [https://fossil-scm.org/home/help?cmd=/download Fossil: Help: /download] | |||
* [https://fossil-scm.org/home/doc/trunk/www/aboutdownload.wiki Fossil: How The Fossil Download Page Works] | |||
Downloadページを用意する。デフォルトで/downloadページが存在するが、これは最新コミットのソースコードだけ。非開発者がファイルをダウンロードして配置してインストールするには、composerの外部パッケージなどを取り込んだ状態のものを配布する必要がある。 | |||
Fossilでは、uvとして別管理していて、これを配布している。/juvlistでJavaScriptでuvリストを取得して、それを使って動的にダウンロードページを構築している。JavaScriptに依存したくないので、通常のHTMLで構築する。 | |||
* HTMLだけで構成する。 | |||
* 配布形式は共用サーバーで扱いやすいようにzipにする。 | |||
uvでdownload.htmlを追加してページを作る。ページの表示内容。 | |||
{| class="wikitable" | |||
!Date | |||
!Version | |||
!Release | |||
!Source | |||
!Change | |||
!History | |||
!Subsequent | |||
|- | |||
|YYYY-mm-dd | |||
|X.X | |||
|Release | |||
|Source | |||
|Change | |||
|History | |||
|Subsequent | |||
|} | |||
こんな感じにする。で、それぞれの行のリンクパスを考える。 | |||
{| class="wikitable" | |||
|+ | |||
!column | |||
!path | |||
|- | |||
|Date | |||
|../info/vX.X | |||
|- | |||
|Version | |||
|../dir?ci=vX.X | |||
|- | |||
|Release | |||
|../uv/gnusocial-vX.X.zip | |||
|- | |||
|Source | |||
|../zip/x.x/gnusocial-src-vX.X.zip | |||
|- | |||
|Change | |||
|../doc/www/changelog.md#vX.X | |||
|- | |||
|History | |||
|../timeline?p=X.X&bt=pre-X.X | |||
|- | |||
|Subsequent | |||
|../timeline?df=X.X | |||
|} | |||
デフォルトではuvへの書き込み権限がないので、セットアップユーザーに"y"権限を付与する。 | |||
Web UIの[Admin]-[Users]-<username>-[Capabilities]=[☑️Write Unversioned]-[Apply Changes] | |||
これでuvへのアップロード (Web UIの/uvやfossil uv sync) が有効になる。 | |||
その後、fossil configuration pull user fossil uv syncするも反映されない。 | |||
fossil status | |||
UNLINK vendor/bin/fetch-mf2 | |||
UNLINK vendor/bin/parse-mf2 | |||
fossilがデフォルトでシンボリックリンクを保存しなくて、同期できていないのかもしれない。 | |||
以下のコマンドで有効にしてやってみる。 | |||
fossil settings allow-symlinks on | |||
これでもダメで、そもそもリモートと通信がうまくできていない感じがあった。 | |||
一旦closeして再度open。その後、fossil user capabilities senooken sy; fossil configuration sync allなどしたら解決した。途中でパスワードが変わっていた。 | |||
うまくいって、暫定Downloadページ (https://gnusocial.jp/notice/8429766<nowiki/>)。 |
2025年1月5日 (日) 01:25時点における最新版
About
GNUプロジェクトのソースコードのホスティングには、フリーソフトを使用したサービスしか使用できない。
それもあって、リポジトリーを自己ホストするために調査した。
- phorge
- trac
- kallithea
- fossil
上記4ソフトのインストール・動作を2024-12に検証 (https://gnusocial.jp/notice/8089277) して、その結果fossilに決めた。fossslが唯一以下を満たした。
- CGIで動作
- リポジトリーと管理UIの統合
Tracもインストールはできたが、これはBTS機能のみで、リポジトリー自体のホスティングはgitwebやcgitなど別サービスが必要だった。2個に分かれるのが面倒くさい。
FossilはSQLiteの著者が管理するプロジェクト。Gitが使いにくいと思っており、そこをうまく解消している。さすがのプロジェクト。
Install
Condition
wiki.gnusocial.jpなどをホストしているCORESERVERに追加する形でインストールする。
- ドメイン=fossil.gnusocial.jp
- ホスティングサービス=CORESERVER
- 方式=CGI
- Web Server=Apache HTTP Server 2.4.37
- OS=GNU/Linux
なお、「 Fossil: How To Configure A Fossil Server」に記載があるように、Fossil自体はFastCGI/SCGI/単独サーバーに対応している。ただ、FastCGIはOpenBSDのhttpd専用。残り2個は常駐プロセスで共用サーバーでは安定稼働できないのでCGIを選ぶ。
Binary
情報源=Fossil: A Coherent Software Configuration Management System
インストールに先立って、fossilのバイナリーを取得する。
ソースコードからコンパイルするか、コンパイル済みバイナリーを配置するだけ。設置先の共用サーバーにログインして、以下のコマンドを実行する。
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 ../../bin/
.bashrcなどに以下を記入して、PATHを設定しておく。
export PATH="$PATH:~/.local/bin"
CGI
情報源
バイナリーを取得したので、CGIで動作させるために設定する。
ディレクトリー構成は以下とする。
- public_html
- fossil: fossilリポジトリーの格納場所。
- fossil.gnusocial.jp: 公開ディレクトリー。
- .htaccess
- fossil: FossilのCGI。
- index.html
以下のコマンドでディレクトリーを作ってCGIファイルなどを配置する。
mkdir -p ~/public_html/fossil ~/public_html/fossil.gnusocial.jp cd ~/public_html/fossil.gnusocial.jp cat <<-'EOT' >.htaccess <FilesMatch fossil$> SetHandler cgi-script </FilesMatch> EOT cat <<-EOT >fossil #!$HOME/.local/bin/fossil directory: $HOME/public_html/fossil notfound: /fossil repolist EOT cat <<-'EOT' >index.html <!DOCTYPE html> <html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="UTF-8" /> <meta name="author" content="SENOO, Ken" /> <title>GNU social JP Fossil</title> </head> <body> <h1>GNU social JP Fossil</h1> <main> <section> <h1>About</h1> <p>This site hosts GNU social fossil repositories.<p> </section> <section> <h1>Link</h1> <ul> <li><a href="fossil">fossil</a>: repository list.</li> <li><a href="fossil/gnusocial">fossil/gnusocial</a>: GNU social main repository</li> </ul> </section> </main> </body> </html>
index.htmlは仮。必要になったタイミングで、内容やスタイルを改良する。
これで一旦稼働する。
あとはFossilリポジトリーの用意。
Repository
Fossil自体の用意はできたので、public_html/fossilにリポジトリーを配置する。GitからFossilへの変換が必要となる。
この作業は緊張する。
- git cloneでgitリポジトリーをローカルに取得。
- fossilに取り込む。
共用サーバーで作業する場合、インポートに時間がかかって、処理が中断する可能性が高い。
この作業はインポートの初回だけなので、コミット履歴が1000以上の膨大な場合、ローカルパソコンで作業して、インポート完了後のsqliteファイルだけ転送した方が確実。
まず以下のコマンドでgitリポジトリー全体を取得する。
git clone --depth 1 https://notabug.org/gnusocialjp/gnusocial cd gnusocial git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*' git fetch --unshallow cd ..
以下のコマンドでgitリポジトリーをFossilリポジトリーに変換する。
git -C gnusocial fast-export --all | fossil import --git gnusocial.fossil
実行が完了すると以下が表示される。
project-id: 6ebf1a799a9d9fd8fcb55a9a6c816fadcc2e0e4f server-id: e45ff282026d409ea80f78f6d1ea62d663b31dda admin-user: password is "password" sh -c 451.82s user 27.95s system 96% cpu 8:16.84 total
このパスワードが管理画面の初期パスワードなので重要。保存しておく。gnusocial.fossilのサイズは225MBだった。
作成したgnusocial.fossilを共用サーバーの~/public_html/fossilに配置する。[https://fossil.gnusocial.jp/fossil/gnusocial/index] でアクセスできる。
この後、Fossilの設定をいろいろ行う。特に重要なのがダウンロードページの作成。このページの作成が、composerなどの外部パッケージの配布などと密接に絡んでくるので重要。
後は、GNU social関係のプロジェクトのアーカイブもしたい。
- plugin
- theme
- tool
上記の3ディレクトリーでサードパーティーのツール類を全部取り込んでここで一元管理したい。
Other
Download
Downloadページを用意する。デフォルトで/downloadページが存在するが、これは最新コミットのソースコードだけ。非開発者がファイルをダウンロードして配置してインストールするには、composerの外部パッケージなどを取り込んだ状態のものを配布する必要がある。
Fossilでは、uvとして別管理していて、これを配布している。/juvlistでJavaScriptでuvリストを取得して、それを使って動的にダウンロードページを構築している。JavaScriptに依存したくないので、通常のHTMLで構築する。
- HTMLだけで構成する。
- 配布形式は共用サーバーで扱いやすいようにzipにする。
uvでdownload.htmlを追加してページを作る。ページの表示内容。
Date | Version | Release | Source | Change | History | Subsequent |
---|---|---|---|---|---|---|
YYYY-mm-dd | X.X | Release | Source | Change | History | Subsequent |
こんな感じにする。で、それぞれの行のリンクパスを考える。
column | path |
---|---|
Date | ../info/vX.X |
Version | ../dir?ci=vX.X |
Release | ../uv/gnusocial-vX.X.zip |
Source | ../zip/x.x/gnusocial-src-vX.X.zip |
Change | ../doc/www/changelog.md#vX.X |
History | ../timeline?p=X.X&bt=pre-X.X |
Subsequent | ../timeline?df=X.X |
デフォルトではuvへの書き込み権限がないので、セットアップユーザーに"y"権限を付与する。
Web UIの[Admin]-[Users]-<username>-[Capabilities]=[☑️Write Unversioned]-[Apply Changes]
これでuvへのアップロード (Web UIの/uvやfossil uv sync) が有効になる。
その後、fossil configuration pull user fossil uv syncするも反映されない。
fossil status
UNLINK vendor/bin/fetch-mf2 UNLINK vendor/bin/parse-mf2
fossilがデフォルトでシンボリックリンクを保存しなくて、同期できていないのかもしれない。
以下のコマンドで有効にしてやってみる。
fossil settings allow-symlinks on
これでもダメで、そもそもリモートと通信がうまくできていない感じがあった。
一旦closeして再度open。その後、fossil user capabilities senooken sy; fossil configuration sync allなどしたら解決した。途中でパスワードが変わっていた。
うまくいって、暫定Downloadページ (https://gnusocial.jp/notice/8429766)。