Certificate verification failed: The certificate is NOT trusted. The certificate chain uses expired certificate.
passenger-ruby のdocker imageが突然ビルドに失敗するようになったので調査した。
Dockerfile
FROM phusion/passenger-ruby26@sha256:c187cae81ba7b0b3aba0f67f0aad4c24fb1352857dcbaf598301fdd2220ea32f RUN apt-get update && apt-get install -y \ libnginx-mod-http-headers-more-filter shared-mime-info \ && apt-get clean ...
事象
apt-get update && apt-get install
時に以下エラーが発生する
Err:5 https://oss-binaries.phusionpassenger.com/apt/passenger bionic Release Certificate verification failed: The certificate is NOT trusted. The certificate chain uses expired certificate. Could not handshake: Error in the certificate verification. E: The repository 'https://oss-binaries.phusionpassenger.com/apt/passenger bionic Release' does not have a Release file.
原因
passengerでは証明書にLet's Encryptを使用しており、その証明書が2021/9/30で期限切れとなった。
新しい証明書である ISRG RootX1
をサポートしていなかったため証明書エラーが発生した。
対処方法
ca-certificates
をアップデートすることで解消できるとのこと。
apt update && apt install -y ca-certificates
しかし、自分の場合はそもそも apt-get update
の段階で証明書エラーが発生してしまいアップデートできなかった。
そのため解消方法を漁っていたところ、以下記事を発見。 github.com
apt updateの前に /etc/apt/sources.list.d
を退避させるとうまくいくとのことで、試して見たところビルドに成功した。
RUN mv /etc/apt/sources.list.d /etc/apt/sources.list.d.bak RUN apt update && apt install -y ca-certificates RUN mv /etc/apt/sources.list.d.bak /etc/apt/sources.list.d
修正後のDockerfile
FROM phusion/passenger-ruby26@sha256:c187cae81ba7b0b3aba0f67f0aad4c24fb1352857dcbaf598301fdd2220ea32f RUN mv /etc/apt/sources.list.d /etc/apt/sources.list.d.back RUN apt-get update && apt-get install -y \ libnginx-mod-http-headers-more-filter shared-mime-info \ && apt-get clean RUN mv /etc/apt/sources.list.d.back /etc/apt/sources.list.d ...
まとめ
今回の事象の原因は、Let's Encryptの新しい証明書にコンテナが対応していなかったことだった。
事象を解決するには ca-certificates
の更新が必要。
docker image として使用していた passenger-ruby の場合、/etc/apt/sources.list.d/passenger.list
がデフォルトで含まれているため、 apt update
時にこのファイルが読み込まれ証明書エラーが発生してしまっていた。
そのため ca-certificates
の更新前に /etc/apt/sources.list.d/
を退避させて読み込まれないようにすることで解決した。
Package mysql-client is not available, but is referred to by another package
事象
Dockerのベースイメージを openJDK 1.8.0_302 へアップデートしたところ、ビルド時に以下のエラーが発生。
Package mysql-client is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source
原因
Debian 10 では mysql-client
は削除されているらしい。
確かにパッケージ一覧に mysql-client
は存在しない。
packages.debian.org
調査
openJDK 1.8.0_302 の Debian バージョンを調べてみた。
# openJDKのコンテナを起動 $ docker container run -it openjdk:8@sha256:74a0711547137cd3787c0b84266a7ba4cb814b98b8950cf95bc2e526bfc05e47 bash # Debianのバージョンを確認 root@70a6026c6964:/# cat /etc/debian_version 10.10
対処方法
default-mysql-client
をインストールする。
参考
GAS触ったこと無いマンが、GASでランダムに数字を出力する機能作ってみた
背景
毎日の定例で雑談枠を設けているのだが、雑談ネタ一覧スプレッドシートを用意しておき、雑談ネタに困った時にそこからピックアップするようにした。
参考記事
その日のネタをランダムに選択するために、GASでランダムに数字を出力する機能を作ってみた。
やりたいこと
- ボタンをクリックするとランダムで1つの数字を出力する
- 出力された数字の行に自動的に移動してくれると嬉しい
作成物
function myFunction() { const spreadSheet = SpreadsheetApp.getActiveSheet(); // 見出しを除いた最小値 const minLength = 2; // ネタ数 const maxLength = spreadSheet.getLastRow(); // ランダムに数を生成 const num = Math.floor(Math.random() * (maxLength + 1 - minLength)) + minLength; // D1に結果を出力 spreadSheet.getRange(1, 4).setValue(num); // 結果で出力されたセルをアクティブにする const sell = spreadSheet.getRange(num, 1); spreadSheet.setActiveRange(sell); }
こんな感じで、ボタンを押すとD1セルに数字が表示されるようになった。(デザインセンスが糞)
参考にした記事
- 乱数の作成
【JavaScript入門】乱数の作り方(範囲指定/重複なし/ランダム文字列) | 侍エンジニアブログ - スプレッドシートでのGASの使い方
GAS(Google Apps Script)入門|エクセルの神髄
感想
すごく簡単にマクロ的なものが使える。
Javascriptで書けるので、結構いろんな処理ができるのかなーと予想。
もっといろいろ書いていきたい。
bundle installでグループ内にあるGemをインストールしたい[備忘録]
bundle install --without ${GROUP}
を実行すると、次回以降に bundle install
をするときも、前回の --without
の設定を引き継いでしまうらしい。
(bundle configが書き換えられてしまうと予想)
なので、 --without ${GROUP}
で除外したグループのGemをインストールしたい場合、bundle configを書き換える必要がある
(例)testグループのGemをインストールしたい場合
# Gemfile group :test do gem 'rspec-rails' end
$ vi .bundle/config --- BUNDLE_PATH: "./vendor/bundle" BUNDLE_FROZEN: "true" BUNDLE_WIHTOUT: "test" # この行を削除
これでbundler installを実行すると、全てのグループのGemがインストールできる
Sprockets::FileNotFound: couldn't find file 'font-awesome' with type 'text/css'
事象
Gemを追加し、 asset:precompile
を実行したところ上記エラー。
追加したGem
https://github.com/bokmann/font-awesome-rails
application.css
に追記した *= require font-awesome
を探しているが、
ファイルが見つからずにエラーになっているっぽい。
原因
Gemを書いた場所が問題だった。
group
の中にGemを追加していた。
group :development, :test do gem 'font-awesome-rails' end
group
の外に出すことで解決した。
gem 'font-awesome-rails' group :development, :test do end
備考
正常にコンパイルされると、public/assets
配下にコンパイル済みのファイルが作成される
$ ls public/assets font-awesome-xxx.css font-awesome-xxx.css.gz fontawesome-webfont-xxx.woff2 fontawesome-webfont-xxx.eot fontawesome-webfont-xxx.eot.gz fontawesome-webfont-xxx.ttf fontawesome-webfont-xxx.gz fontawesome-webfont-xxx.svg fontawesome-webfont-xxx.svg.gz fontawesome-webfont-xxx.woff
また、 public/assets
に配置されたものについては、HTTPで接続することができる
http://localhost:8080/assets/font-awesome-xxx.css
bundle installでGemfileが作成されない
やりたいこと
GemfileにGemを追加し、Gemfile.lockを更新したい。
事象
Gemfileを更新した後 bundle install
を実行すると以下のエラーが表示され、Gemfileが更新されない。
You are trying to install in deployment mode after changing your Gemfile. Run `bundle install` elsewhere and add the updated Gemfile.lock to version control. If this is a development machine, remove the Gemfile freeze by running `bundle config unset deployment`.
bundler -v
を実行したところエラーが出た。
Traceback (most recent call last): 2: from /home/vagrant/.rbenv/versions/2.6.5/bin/bundler:23:in `<main>' 1: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/site_ruby/2.6.0/rubygems.rb:296:in `activate_bin_path' /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/site_ruby/2.6.0/rubygems.rb:277:in `find_spec_for_exe': Could not find 'bundler' (2.0.1) required by your Gemfile.lock. (Gem::GemNotFoundException) To update to the latest version installed on your system, run `bundle update --bundler`. To install the missing version, run `gem install bundler:2.0.1`
解決策
エラーメッセージ2
に書かれている通り、 gem install bundler:2.0.1
を実行。
再度 bundle install
をすると、同じようなエラーが出た。
You are trying to install in deployment mode after changing your Gemfile. Run `bundle install` elsewhere and add the updated Gemfile.lock to version control. If this is a development machine, remove the Gemfile freeze by running `bundle config --delete deployment`.
.bundle/config
を見てみる。
$ cat .bundle/config --- BUNDLE_DEPLOYMENT: "true" BUNDLE_PATH: "./vendor/bundle" BUNDLE_FROZEN: "true" BUNDLE_WITHOUT: "development:test"
エラーメッセージ書かれている通りbundle config --delete deployment
を実行。
また、 BUNDLE_FROZEN
が true
の場合、Gemfileを変更できなくなるようなので
bundle config set frozen false
も実行しておく。
http://ruby.studio-kingdom.com/bundler/bundle_config/
コマンド実行後の .bundle/config
$ cat .bundle/config --- BUNDLE_PATH: "./vendor/bundle" BUNDLE_WITHOUT: "development:test"
これで bundle instal
が成功するようになった!
しかし、そもそもなぜ bundler -v
でエラーが出たのかは謎。