約 7 分で読めます。
nextcloudでアプリ入れようとしたら、
一覧に何も表示されない…
今までこんなことなかったのに、なぜ?
こんな悩みを解決します。
具体的にはこんな現象
私の環境でもたまに起きています。
アプリ画面で左ペインある項目が明らかに少ない。
ちなみに通常時はこう。
左側の項目数が多いことがわかります。
私は二要素認証であるTOTPを入れようとしたときにこの現象に出くわしました。
TOTPについては↓の記事を参照ください。
原因と対策①
アプリ一覧を表示させる際に元データをnextcloudの本家サーバーに取りに行っているのですが、60秒のタイムアウトが発生していることが原因でした。
具体的にはこの部分。
管理者アカウントでログインし、「ログ」に移動。
Could not connect to appstore: cURL error 28: Operation timed out after 60000 milliseconds with 1314068 bytes received (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://apps.nextcloud.com/api/v1/apps.json
とあり、apps.jsonのデータをGETするなかで60秒のタイムアウトが発生したことがわかります。
これはnextcloud本家と、自分が立てているnextcloudサーバー、どちらが悪いということはなく、
・通信条件が良くなかった ・たまたまnextcloud本家が混んでいた
といろいろ原因は考えられます。
いずれにしろ私たちの方がやれることは何もないので、素直にしばらく待ってリトライするくらいしか効果的な対策はないと思います。
少し脱線 – タイムアウトについて –
このタイムアウト60秒はソースコードにハードコードされていました。
そのため、値を変更することはできません。
ここにタイムアウトの設定があります。
lib/private/App/AppStore/Fetcher/Fetcher.php fetch($ETag, $content)
ソースコードを直接編集しない限りタイムアウト時間を変更することはできなさそうです。
原因と対策② – 2021/11/02更新-
この記事のコメントでhiro-matsumotoさんから
NextcloudをホスティングしているOSによっては、Nextcloudが内部で使用しているcurlがhttps証明書検証でエラーになり、同じ現象が発生することがある
というアドバイスをいただきました。
要因はこの本家フォーラムに書いてある通りで、
The idea of two chains: one is valid and the other remain for higher compatibility with older android devices (older android devices do not check the expiration date of the root certificate if the intermedia is still valid)
But older Linux distros are bothered (with newer ones this is no longer a problem) when a chain leads to an expired root although another chain leads to a correct root. In this case, you can simply remove the expired root certificate.
というコメントの通り、
・新しめのデバイスやOS 証明書チェーンが複数ある場合にどれか1つでも有効なら有効となる ・古めのデバイスやOS 証明書チェーンが複数ある場合にどれか1つでも無効なら無効となる
と、振る舞いが異なるようで、
これにより、
Nextcloudのアプリ一覧が表示されない不具合が起こることもある
とのことでした。
自分のコンテナ環境ではこのケースに当てはまりませんでしたが、もしこれが疑われる場合、
rm /etc/ssl/certs/DST_Root_CA_X3.pem
として期限切れの証明書を削除することで解決できるようです。
ホスティングサービスを使っている場合は、管理会社にお願いする必要がある。
終わりに
いかがでしたか。
あまり直面することはないと思いますが、
もし現象発生してしまったら、前記2つを疑ってみてください!
nextcloudサーバーの立て方はこちらの記事をどうぞ!
コンテナ化したい?
そんな方はこちらの記事がオススメです!
Comments
こんにちは、はじめまして。
私もこの事象になりましてこちらを拝見していました。
私の環境はさくらのレンタルで無料SSL(LetsEncrypt)だったのですが、
何か解決方法がないかと探していましたら以下の情報がありました。
********************************
https://help.nextcloud.com/t/app-store-missing/125729/12
>問題はあなたではなく、NextcloudサーバーからのLetsEncrypt証明書でした。
>この場合、サーバー上のDSTルートCA X3 vom LetsEncryptを削除する必要があります。
>https://letsencrypt.org/docs/dst-root-ca-x3-expiration-september-2021/
>共有ホスティング業者のみが削除できると思いますDST_Root_CA_X3。
>( rm /etc/ssl/certs/DST_Root_CA_X3.pem)
>問題が解決しました。
>…/ nextcloud / resources / config / ca-bundle.crtファイルからDSTルートCAX3セク>ションを削除しました。
********************************
上記Nextcloudコミュニティ情報から「ca-bundle.crt」ファイルの「DST Root CA X3
」部分を削除しましたら、アプリストアが表示できるようになりました!
コメントありがとうございます。
ご提示のURLを読んでみました。
ご指摘の通り、
Nextcloud公式サーバーに使われているLet’s Encryptの証明書が問題を起こしている、
と読めました。
Nextcloudはアプリ一覧を表示するときにcurlを使っているので、確かに辻褄が合いますね!
私の環境でもやってみます、ありがとうございます!