「GNU social JP Fossil」の版間の差分
Gnusocialjp (トーク | 投稿記録) 細 (→CGI) |
Gnusocialjp (トーク | 投稿記録) (Doc) |
||
(同じ利用者による、間の7版が非表示) | |||
113行目: | 113行目: | ||
あとは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 == | |||
=== 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への変換が必要となる。
この作業は緊張する。
- 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
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 Fossil、Fossil: 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)。