「GNU social JP Fossil」の版間の差分

提供:GNU social JP Wiki
(新規作成。)
 
(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が使いにくいと思っており、そこをうまく解消している。さすがのプロジェクト。


== Work ==
==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への変換が必要となる。

この作業は緊張する。

  1. git cloneでgitリポジトリーをローカルに取得。
  2. 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)。