apt updateでyarnリポジトリがエラーを吐く

サーバはubuntu 18.04。ansibleがこんなエラーを吐いた

fatal: [xxxxx]: FAILED! => {"changed": false, "msg": "Failed to update apt cache: unknown reason"}

unknownって・・・、しかしどうやらapt updateでエラーが起こってるらしいことはわかるのでログインして直接apt updateしてみる

$ sudo apt update
[sudo] nyan のパスワード:
取得:1 https://dl.yarnpkg.com/debian stable InRelease [17.1 kB]
ヒット:2 https://deb.nodesource.com/node_10.x bionic InRelease
エラー:1 https://dl.yarnpkg.com/debian stable InRelease
  以下の署名が無効です: EXPKEYSIG 23E7166788B63E1E Yarn Packaging <yarn@dan.cx>
ヒット:3 http://us.archive.ubuntu.com/ubuntu bionic InRelease
ヒット:4 http://us.archive.ubuntu.com/ubuntu bionic-updates InRelease
ヒット:5 http://us.archive.ubuntu.com/ubuntu bionic-backports InRelease
ヒット:6 http://security.ubuntu.com/ubuntu bionic-security InRelease
17.1 kB を 1秒 で取得しました (18.3 kB/s)
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードできるパッケージが 59 個あります。表示するには 'apt list --upgradable' を実行してください。
W: 署名照合中にエラーが発生しました。リポジトリは更新されず、過去のインデックスファイルが使われます。GPG エラー: https://dl.yarnpkg.com/debian stable InRelease: 以下の署名が無効です: EXPKEYSIG 23E7166788B63E1E Yarn Packaging <yarn@dan.cx>
W: https://dl.yarnpkg.com/debian/dists/stable/InRelease の取得に失敗しました  以下の署名が無効です: EXPKEYSIG 23E7166788B63E1E Yarn Packaging <yarn@dan.cx>
W: いくつかのインデックスファイルのダウンロードに失敗しました。これらは無視されるか、古いものが代わりに使われます。

追加したyarnのリポジトリのGPG鍵が変わっているようだ。鍵も以下のような定義でansibleで追加しているのだが、

- name: add yarn apt key
  apt_key:
    url: https://dl.yarnpkg.com/debian/pubkey.gpg
    state: present

presentはあるか無いかしか見ていないので、鍵が変わっても更新はされないようだ。うーん、良い解決法が思いつかないので一旦手動で鍵を削除

$ apt-key list
/etc/apt/trusted.gpg
--------------------
pub   rsa4096 2016-10-05 [SC]
      72EC F46A 56B4 AD39 C907  BBB7 1646 B01B 86E5 0310
uid           [  不明  ] Yarn Packaging <yarn@dan.cx>
sub   rsa4096 2016-10-05 [E]

pub   rsa4096 2014-06-13 [SC]
      9FD3 B784 BC1C 6FC3 1A8A  0A1C 1655 A0AB 6857 6280
uid           [  不明  ] NodeSource <gpg@nodesource.com>
sub   rsa4096 2014-06-13 [E]

yarnの鍵は86E5 0310なのでこれを消す

$ sudo apt-key del 86E50310
OK

これでansibleがエラーなく実行された。ちなみに新しいubuntuでは apt-key コマンドで鍵を追加するのは非推奨になっており、/etc/apt/trusted.gpg.dディレクトリに鍵ファイルを置くという形になっているらしい。ファイルならば変更されたら更新できるので上手いことできるかもしれない

関係ないがnodeのバージョンが10。さすがに古くなってきたのでそろそろ上げたい。

参考

'pthread.h' file not found

重い腰を上げてmacruby 3をインストール

rbenvの更新

$ brew upgrade ruby-build

rbenvでruby 3をインストール

$ rbenv install 3.0.0
Downloading openssl-1.1.1i.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/e8be6a35fe41d10603c3cc635e93289ed00bf34b79671a3a4de64fcee00d5242
Installing openssl-1.1.1i...

BUILD FAILED (macOS 11.2.1 using ruby-build 20210119)

Inspect or clean up the working tree at /var/folders/4t/bm7k_g7d37v5n9vxv6lfzjnh0000gn/T/ruby-build.20210227222639.27074.JMBx8l
Results logged to /var/folders/4t/bm7k_g7d37v5n9vxv6lfzjnh0000gn/T/ruby-build.20210227222639.27074.log

Last 10 log lines:
clang  -I. -Iinclude -fPIC -arch x86_64 -O3 -Wall -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/Users/nyan/.rbenv/versions/3.0.0/openssl/ssl\"" -DENGINESDIR="\"/Users/nyan/.rbenv/versions/3.0.0/openssl/lib/engines-1.1\"" -D_REENTRANT -DZLIB -DZLIB_SHARED -DNDEBUG -I/Users/nyan/.rbenv/versions/3.0.0/include  -MMD -MF crypto/asn1/x_val.d.tmp -MT crypto/asn1/x_val.o -c -o crypto/asn1/x_val.o crypto/asn1/x_val.c
clang  -I. -Iinclude -fPIC -arch x86_64 -O3 -Wall -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/Users/nyan/.rbenv/versions/3.0.0/openssl/ssl\"" -DENGINESDIR="\"/Users/nyan/.rbenv/versions/3.0.0/openssl/lib/engines-1.1\"" -D_REENTRANT -DZLIB -DZLIB_SHARED -DNDEBUG -I/Users/nyan/.rbenv/versions/3.0.0/include  -MMD -MF crypto/async/arch/async_null.d.tmp -MT crypto/async/arch/async_null.o -c -o crypto/async/arch/async_null.o crypto/async/arch/async_null.c
In file included from crypto/async/arch/async_null.c:11:
In file included from crypto/async/arch/../async_local.h:24:
include/openssl/crypto.h:415:13: fatal error: 'pthread.h' file not found
#   include <pthread.h>
            ^~~~~~~~~~~
1 error generated.
make[1]: *** [crypto/async/arch/async_null.o] Error 1
make: *** [all] Error 2

おや?まあ、どうせまたapple clang絡みでしょ・・・、というわけで脳死brewgccをインストール

$ brew install gcc
$ rbenv install 3.0.0                                                                                      [feature/update_ruby]
Downloading openssl-1.1.1i.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/e8be6a35fe41d10603c3cc635e93289ed00bf34b79671a3a4de64fcee00d5242
Installing openssl-1.1.1i...
Installed openssl-1.1.1i to /Users/nyan/.rbenv/versions/3.0.0

Downloading ruby-3.0.0.tar.gz...
-> https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0.tar.gz
Installing ruby-3.0.0...
ruby-build: using readline from homebrew
Installed ruby-3.0.0 to /Users/nyan/.rbenv/versions/3.0.0

上手く行ったっぽい