Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -96,3 +96,9 @@ test/data
test/import.zip
test/dummyfile/import.zip
test/dummyfile/data

# JGSS本番データ復元の作業ファイル(サイズ大・個人情報含むため追跡しない)
/after_restore.dump
/after_restore_jgssdds.dump
/es_snapshot_restore/
/es_snapshot_restore_new/
71 changes: 71 additions & 0 deletions BUILD_FIX_NOTES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# docker-compose2.yml ビルド修正メモ(feature/jgss)

`docker-compose -f docker-compose2.yml build` を実行した際、外部依存の経年劣化により
複数の段階でビルドが失敗した。原因と対応を記録する。

## 1. Debian buster のミラー消滅(404 Not Found)

- **症状**: `apt-get update` が `deb.debian.org` / `security.debian.org` に対して
404 Not Found で失敗する。
- **原因**: Debian buster は EOL となり、通常のミラーから削除され
`archive.debian.org` に移動済み。
- **対応**: `Dockerfile` の `stage_2` で、`provision-web.sh` 実行前に
`/etc/apt/sources.list` を `archive.debian.org` を参照するよう書き換え、
`Acquire::Check-Valid-Until "false"` を設定した。

## 2. NodeSource Node.js 4.x リポジトリの GPG 署名検証失敗

- **症状**: `https://deb.nodesource.com/setup_4.x` が追加するリポジトリの
`InRelease` が `NO_PUBKEY 1655A0AB68576280` で検証できず、
`apt-get update` が失敗する。
- **原因**: Node.js 4.x 用リポジトリは EOL で、署名鍵が NodeSource 側の
鍵配布エンドポイントから既に取得できない。
- **対応**: `scripts/provision-web.sh` で、NodeSource セットアップスクリプト
実行後に `sources.list.d/nodesource.list` の `[signed-by=...]` オプションを
`[trusted=yes]` に置き換え、このリポジトリのみ検証をスキップするようにした
(他の apt ソースの検証には影響しない)。セットアップスクリプト自体が
内部で実行する `apt-get update` の失敗で `set -o errexit` により
スクリプト全体が止まらないよう `|| true` を付与し、その後
明示的に `apt-get -y update` を再実行している。

## 3. npm 間接依存(psl)が Node.js 4.x で構文エラー

- **症状**: `npm install -g node-sass@3.8.0 ...` の実行中、
`node-sass/node_modules/request/node_modules/tough-cookie/node_modules/psl`
で `SyntaxError: Unexpected token ...`(スプレッド構文)が発生する。
- **原因**: `package.json` にバージョン固定(lockfile)がなく、
`npm install` 実行時点の npm レジストリ最新版の間接依存を解決するため、
時間経過とともに `psl` が Node.js 4.x では実行できないモダンな構文を
使うバージョンに更新されてしまっていた。
- **対応**: `scripts/provision-web.sh` の該当 `npm install -g` コマンドに
`psl@1.1.31 tough-cookie@2.3.4`(Node.js 4.x 互換の古いバージョン)を
明示的に追加し、間接依存として新しいバージョンが解決されないようにした。

## 4. GitHub 上の依存リポジトリ削除(angular-schema-form-ckeditor)

- **症状**: `create-instance2.sh` の npm install 中、
`https://github.com/webcanvas/angular-schema-form-ckeditor.git` の clone で
`Invalid username or token. Password authentication is not supported for
Git operations.` が発生する。
- **原因**: 元リポジトリ `webcanvas/angular-schema-form-ckeditor` が
GitHub 上から削除(または非公開化)されており、匿名アクセスで
401 Unauthorized となっていた。
- **対応**: 同一コミット(`b213fa934759a18b1436e23bfcbd9f0f730f1296`)を
含むフォーク `nvdnkpr/angular-schema-form-ckeditor` を発見し、
`modules/invenio-deposit/invenio_deposit/bundles.py` の参照先を
そちらに変更した。また、npm(v2系)のシャロークローンでは
フォーク側のデフォルトブランチ tip 以外のコミットに到達できず
`fatal: bad object` となったため、`git+commit` 参照ではなく
GitHub の tarball URL
(`.../archive/<commit>.tar.gz`)を指定する方式に変更した。

## 変更ファイル

- `Dockerfile`
- `scripts/provision-web.sh`
- `modules/invenio-deposit/invenio_deposit/bundles.py`

## 結果

上記 4 点の修正により `docker-compose -f docker-compose2.yml build` が
成功することを確認済み(`weko-web` イメージのビルド完了、exit code 0)。
8 changes: 8 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,14 @@ ENV SEARCH_INDEX_PREFIX=tenant1
ENV INVENIO_DB_POOL_CLASS=QueuePool

FROM stage_1 AS stage_2
# Debian buster is EOL: repoint apt sources to archive.debian.org
# so `apt-get update` doesn't 404 against the removed mirrors.
RUN sed -i \
-e 's|deb.debian.org/debian |archive.debian.org/debian |g' \
-e 's|security.debian.org/debian-security|archive.debian.org/debian-security|g' \
-e '/buster-updates/d' \
/etc/apt/sources.list && \
echo 'Acquire::Check-Valid-Until "false";' > /etc/apt/apt.conf.d/99no-check-valid-until
# Install Weko web node pre-requisites:
COPY scripts/provision-web.sh /tmp/
RUN /tmp/provision-web.sh
Expand Down
55 changes: 55 additions & 0 deletions KNOWN_ISSUE_download_button_not_shown.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# 既知の不具合: 利用申請承認済みアカウントでもダウンロードボタンではなく申請ボタンが表示される

> この `feature/jgss` ブランチ上での作業・レビューにあたり、既知の別事象として最初に共有しておくノート。本PRのコード変更(ビルド修正・環境設定)そのものが原因の事象ではない。原因調査・改修方針は別途まとめ済みで、コードへの適用は本PRの範囲外(未実施)。

## 1. 事象

利用申請(usage application)が承認済み(承認済みステータス)のアカウントでログインし、当該アイテムの詳細画面にアクセスすると、期待される「ダウンロード」ボタンではなく「申請」ボタンが表示される。

## 2. 現在の対応状況

- 原因調査済み: `FilePermission.status` を承認時に `1`(承認済み)へ更新する処理が `feature/jgss` のコードに存在しないこと、および画面側の権限判定が実際の承認経路(`file_onetime_download` テーブル)を一切参照していないことが根本原因。
- `jgss-pre` ブランチの実装を参考にした改修案・結合テスト計画を作成済み。
- Redmineに起票済み(担当者に確認のこと。本ファイルにはチケット番号は含めていない)。
- 上記いずれもコードへの適用はまだ行っていない。本ブランチのビルド・レビューを進める上で、この事象が別途あることを認識しておくこと。

## 3. 詳しい調査資料

同一環境(`/home/vagrant`)内に以下の内部ドキュメントがある(このgitリポジトリには含まれない)。

- `doc/download_button_not_shown_for_approved_user_report_20260916.md` — 原因調査レポート
- `doc/download_button_fix_proposal_20260916.md` — 改修案(`jgss-pre`参考)
- `doc/download_button_fix_integration_test_plan_20260916.md` — 結合テスト計画

## 4. 再現用データ

本リポジトリに、この事象をレビュアの手元で再現するための**完全に合成した**デモデータ一式を同梱している。本番データ・個人情報は一切含まない(メールアドレスは `populate-instance.sh` が作るデモアカウント `contributor@example.org` のみ)。

- 置き場所: `scripts/demo/download_button_bug_repro/`
- 詳細手順: `scripts/demo/download_button_bug_repro/README.md`

### 投入(`install.sh` による通常の新規構築が済んだ後に実行)

```bash
./scripts/demo/download_button_bug_repro/load.sh
```

`fixture.sql`(PostgreSQL の差分行)と `es_bulk.ndjson`(Elasticsearch の当該アイテム文書)を投入する。自分が作る行だけを先に `DELETE` してから入れるため冪等で、既存行の変更・削除は行わない。

### 再現手順

1. `contributor@example.org` / `uspass123` でログインする。
2. `https://<host>/records/2003976`(「サンプル制限公開アイテム / Sample Restricted Item」)を開く。
3. ファイル `sample_restricted_data.txt` の行に、**「ダウンロード」ではなく「申請」ボタン**が表示される。押すと同じ利用申請ワークフローが最初から始まってしまう。

利用申請アクティビティ `A-20260917-00001` は `activity_status='F'`(承認・完了済み)であるにもかかわらず上記になる点が本事象である。

### DB 上のシグネチャ

| テーブル | 期待 | 実際 |
| --- | --- | --- |
| `workflow_activity` (`A-20260917-00001`) | `activity_status='F'` | `activity_status='F'` |
| `file_permission` (`record_id='2003976'`) | `status=1` の行がある | **行が 1 件もない** |
| `file_onetime_download` (`record_id='2003976'`) | — | `contributor@example.org` の行がある |

シェルからの検証は `docker compose exec -T web invenio shell /code/scripts/demo/download_button_bug_repro/verify.py` で行える。
Loading
Loading