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

提供:GNU social JP Wiki
(Repository)
(Doc)
 
(同じ利用者による、間の6版が非表示)
125行目: 125行目:
# fossilに取り込む。
# fossilに取り込む。


共用サーバーで作業する場合、リポジトリーの取得に時間がかかる可能性があるので、ネットワーク帯域の節約のため分割して確実に取得する。
共用サーバーで作業する場合、インポートに時間がかかって、処理が中断する可能性が高い。
cd ~/public_html/fossil
 
この作業はインポートの初回だけなので、コミット履歴が1000以上の膨大な場合、ローカルパソコンで作業して、インポート完了後のsqliteファイルだけ転送した方が確実。
 
まず以下のコマンドでgitリポジトリー全体を取得する。
まず以下のコマンドでgitリポジトリー全体を取得する。
  git clone --depth 1 https://notabug.org/gnusocialjp/gnusocial
  git clone --depth 1 https://notabug.org/gnusocialjp/gnusocial
135行目: 137行目:
以下のコマンドでgitリポジトリーをFossilリポジトリーに変換する。
以下のコマンドでgitリポジトリーをFossilリポジトリーに変換する。
  git -C gnusocial fast-export --all | fossil import --git gnusocial.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 ==
 
=== Document ===
 
==== About ====
Fossilの埋込文書などのWebページ機能を使ってGNU social自体の公式サイトも一緒に作ることにする。
 
いくつか重要な文書機能があるので、それの整理と方針を考える。
 
特に重要なのが以下の機能。
 
* [https://fossil-scm.org/home/help?cmd=/dir /dir]ページ [[https://fossil-scm.org/home/file?name=src/browse.c&ci=version-2.25&ln=400 Fossil: browse.c at version-2.25]]: ファイルブラウザーでディレクトリー内の「'readme','readme.txt','readme.md','readme.wiki','readme.markdown',"" 'readme.html'」の内容を下にデフォルト表示してくれる。
* /doc/<ci>/<file> や/fileの埋込文書 ([https://www.fossil-scm.org/home/doc/trunk/www/wikitheory.wiki Fossil: Wiki In Fossil]、[https://www.fossil-scm.org/home/doc/trunk/www/embeddeddoc.wiki Fossil: Project Documentation]): ソースコード内の文書を、拡張子を解釈して描画表示してくれる。
* uv: ダウンロードページ・ビルド結果の配布用。
 
特に埋込文書を駆使して、公式サイトを構築する。
 
ダウンロードページだけ扱いが特殊なので、uvで分離して作成。それ以外は埋込文書を使う。
 
==== Doc ====
READMEはindex.mdに改名する。
 
/doc/trunkをプロジェクトトップ画面にする。
 
その後は、
 
* index.md
* www/
 
==== 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月6日 (月) 07:11時点における最新版

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

Document

About

Fossilの埋込文書などのWebページ機能を使ってGNU social自体の公式サイトも一緒に作ることにする。

いくつか重要な文書機能があるので、それの整理と方針を考える。

特に重要なのが以下の機能。

  • /dirページ [Fossil: browse.c at version-2.25]: ファイルブラウザーでディレクトリー内の「'readme','readme.txt','readme.md','readme.wiki','readme.markdown',"" 'readme.html'」の内容を下にデフォルト表示してくれる。
  • /doc/<ci>/<file> や/fileの埋込文書 (Fossil: Wiki In FossilFossil: Project Documentation): ソースコード内の文書を、拡張子を解釈して描画表示してくれる。
  • uv: ダウンロードページ・ビルド結果の配布用。

特に埋込文書を駆使して、公式サイトを構築する。

ダウンロードページだけ扱いが特殊なので、uvで分離して作成。それ以外は埋込文書を使う。

Doc

READMEはindex.mdに改名する。

/doc/trunkをプロジェクトトップ画面にする。

その後は、

  • index.md
  • www/

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)。