見出し画像

【Chromebook】apt-key が deprecated だから必死になってやったこと(ただしYarn に限る)

No Thinking, No Life

あれは2009年。

「週刊アスキー」別冊の Ubuntu 特集本を買った。CD-ROM も付いていた。

頑張って購入した Power Mac G4 Quicksilver が、アップデート対象から外れてしまったので、世間でちょっと盛り上がっていた Ubuntu(Linux ディストリビューション)を入れて、G4 を蘇らせようと画策してのことだった。

バージョンは、Ubuntu 9.04(Jaunty Jackalope)か、Ubuntu 9.10(Karmic Koala)だったと思う。オレンジっぽい色の背景画像に、アフリカの太鼓みたいな起動音が鳴り響いたときは感動した。

とはいえ、大変なのはそこからだった。

初めての Linux コマンドは呪文に見えた。ただひたすら、意味もわからずターミナルにコマンドを打ち込んだ。

その中で覚えた、パッケージを管理するコマンド

$ sudo apt-get update
$ sudo apt-get upgrade

そしてそれを、Chromebook 上の Debian になっても、何も考えずにそのままターミナルに打ち込んでいた。(Ubuntu は Debian 系だし)


apt-key is deprecated(廃止予定).

ところが、Debian 11 bullseye にアップデートしてから、’sudo apt-get update’ と打つと、警告が出るようになった。

Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).

「apt-key」が deprecated ってどういうこと?

技術評論社の記事によると、この時点で(2021年)すでに「apt-key」は廃止予定と書かれている。

そうか、突然で戸惑ったけど、実際はおばちゃんが Chromebook を買う前から「apt-key」は廃止予定だったのか。

で、この「apt-key の廃止」というのは、(難しくて上手く説明できないけれど)システム(Debian)に使うパッケージのリポジトリの鍵(key)と、どちらかと言うとセキュリティリスクの高いサードパーティのリポジトリの鍵を、今までは一緒に扱っていたけれど、今後は別々に扱うことになったから、サードパーティのパッケージは、廃止予定の「apt-key」を介さずにインストールしてね。と、言っていると理解した。(おばちゃんの脳みその限界)

・・・って、だから、どうしろというのよ。

apt-key で登録されている鍵を見る

と、とりあえずだ。

「apt-key」が何なのか、少しでも手がかりが欲しい。

調べているうちに「apt-key」に登録されている鍵のリストを表示する方法がわかったので、中身を見てみる。

$ apt-key list
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
/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]
sub   rsa4096 2019-01-02 [S] [有効期限: 2026-01-23]
sub   rsa4096 2019-01-11 [S] [有効期限: 2026-01-23]

/etc/apt/trusted.gpg.d/debian-archive-bookworm-automatic.asc
------------------------------------------------------------
pub   rsa4096 2023-01-21 [SC] [有効期限: 2031-01-19]
…(略)

うげげ、いつもの訳わからん英字と数字の羅列だ。

あれ?

リストの中で Debian が使ってそうな鍵は、/etc/apt/trusted.gpg.d/ にあるのに、Yarn だけ /etc/apt/trusted.gpg になっている。Yarn はサードパーティだ。

(注:LibreOffice から Google スプレッドシートに乗り換えたので、LibreOffice はアンインストールしています)

もしかして・・・Yarn おまえなのか?

サードパーティの鍵を削除する

兎にも角にも、警告の原因を Yarn に絞った。

検索しまくって、解決への手順を進める。

(1) apt-key のリストから Yarn を削除する。

$ sudo apt-key del 86E50310(フィンガープリント末尾8桁)

【追記の注意書き】 Yarn のリストのファイルは削除したのですが場所(ディレクトリ)がうろ覚えです。万が一、この記事を参考にする方がおられましたら、きちんとした情報のご確認をお願いいたします。すみません。

$ rm /etc/apt/sources.list.d/yarn.list

(2) npm でインストールした Yarn 本体を削除する。

$ npm uninstall -g yarn
$ npm cache clear --force
$ rm -rf ~/.npm
 $ rm -rf ~/.yarn

(3) これで警告が消えるか試す

$ sudo apt update 

おおっ、警告が消えた!

Corepack を使う

とりあえず Yarn の削除はできた。

で、ここからが問題。Yarn はやっぱり必要だから、なんとかしてエラー(警告)のない方法でインストールしたい。

・・・

そうよ、公式サイトよ。おばちゃん以外にも、迷える(子)羊はいるはずよ。

Corepack?

we don't tell you to run npm install -g yarn to install Yarn - we even recommend against it.

なんだか、公式が npm を使ってインストールすることを勧めていない。

To counter that, Yarn joined forces with the Node.js project to start the development of Corepack,

「Corepack」ってのを推してる。

Corepack is included with all official Node.js releases starting from Node.js 14.19 / 16.9.

ふむふむ。Node.js 14.19 / 16.9 から「Corepack」が Node.js に最初から入ってるっぽい。

$ node -v
v20.10.0

$ corepack -v
0.22.0

おおっ、入ってる! これで行くか。

It's however opt-in for the duration of the experimental stage, so you'll need to run corepack enable before it's active.

$ corepack enable

「Corepack」を有効化して

今まで使用していた Yarn はバージョン1.x で、この機会に最新のバージョン4.x を試してみたいから、グローバルじゃなくてプロジェクト毎にインストールすることを選ぶ。

You can use corepack use to ask Corepack to update your local package.json to use the package manager of your choice:

2024.4.5追記「下記の方法は無謀でした」
いじっているうちにところどころエラーが出たため、試行錯誤した結果、現行プロジェクトの Yarn 1.x -> 4.x バージョンアップは諦めました(自分の技術力が足りないため)。現在は初心に戻って、Macbook と Debian 共に「nvm + npm」で Node.js 環境を作っています。 

今回の教訓は「己を知って無理はしない」

(以下、元記事)

と、その前に Yarn 経由でインストールした Next.js(node_modules)をプロジェクト内(VSCode のターミナル)で削除する。

$ rm -rf node_modules
$ rm yarn.lock

さあ、「Corepack」の出番よ。

$ corepack use yarn@* # sets the latest version in the package.json

Yarn 4.1.1 になってる・・・

しかも、pacakage.json にあるリストのパッケージも一緒にインストールされたみたい。よし、

$ yarn dev

なんの問題もなく、テストサイト(http://localhost:3000/)が表示された。

ちなみに「apt-key」の警告も出ない。

長かったけど、最後はあっさりクリアしたよ。

【今回のメモ】git に追跡されているファイルをローカルで除外したい

$ git update-index --skip-worktree .gitignore


WEBデザイナー(自営業)のおばちゃんです。最近はBlenderネタ多めです。