UbuntuにAtomをインストールする | Atom公式推奨の手順を読み解く

Atom公式の推奨する手順に従って、AtomをUbuntuにインストールしました。

結論を言うと、次の4行のコマンドを実行しました。

$ wget -qO - https://packagecloud.io/AtomEditor/atom/gpgkey | sudo apt-key add -
$ sudo sh -c 'echo "deb [arch=amd64] https://packagecloud.io/AtomEditor/atom/any/ any main" > /etc/apt/sources.list.d/atom.list'
$ sudo apt update
$ sudo apt install atom


このそれぞれのコマンドで行っている処理内容を、詳細に読み解いていきます。



Introduction

Linuxではエディタとしてvimを使っています。 使いこなせばとても優秀なエディタだそうですが、初心者としては使いにくい部分があるのは事実です。

そこでとりあえず、Windowsでいつも私が使っているエディタAtomを、Ubuntuにもインストールしてみました。

インストール方法がAtom公式ホームページで解説されていましたが、初心者である私にとってその処理内容は謎ばかりでした。 今回は、その一つ一つの手順を読み解いていきます。

↓Atom公式のインストール方法ヘルプ flight-manual.atom.io


Material

Ubuntu18.04.1 LTS を
Windows10の上に、VMwareによって構築した仮想環境で起動しています。
www.bioerrorlog.work


Results

1行目 | 認証キーのダウンロード・登録

$ wget -qO - https://packagecloud.io/AtomEditor/atom/gpgkey | sudo apt-key add -

wgetコマンドをとあるURLに対して実行し、その結果をパイプでsudo apt-key add -に渡しているようです。

まずはwgetコマンドとそのオプション-pOの機能について、マニュアルから調べます。

$man wget
NAME
       Wget - The non-interactive network downloader.

~
-q
--quiet
    Turn off Wget's output.

~
-O file
--output-document=file
    The documents will not be written to the appropriate files, but all will be
    concatenated together and written to file.  If - is used as file, documents will be
    printed to standard output, disabling link conversion.  (Use ./- to print to a file
    literally named -.)

    Use of -O is not intended to mean simply "use the name file instead of the one in the
    URL;" rather, it is analogous to shell redirection: wget -O file http://foo is
    intended to work like wget -O - http://foo > file; file will be truncated immediately,
    and all downloaded content will be written there.

wgetコマンドはネットワークダウンローダーであり、オプション-pはただ出力を表示しないという意味みたいです。

面白いのは次の出力オプション-Oで、出力ファイルとして-を指定すると、結果が標準出力にプリントされると書いてあります。 今回実行するwgetコマンドの前半部分は$ wget -qO - <URL>ですので、まさにURLからダウンロードした結果の出力先に-が指定されており、標準出力として後半のsudo apt-key add -へとパイプされることになります。


さて、次はダウンロードするURLhttps://packagecloud.io/AtomEditor/atom/gpgkeyを調べてみます。 まずはこのURLにブラウザからアクセスしてみました。 するとダウンローダーが立ち上がり、”AtomEditor-atom-4C6E74D6C0A35108.pub.gpg”というファイルのダウンロードを提示されました。 先のwgetコマンドではこのファイルをダウンロードし、sudo apt-key add -へとパイプしたわけでしょう。

さっそくこのファイルを手動でダウンロードし、中身を調べてみます。

まずはfileコマンドでファイルタイプを調べます。

$ file AtomEditor-atom-4C6E74D6C0A35108.pub.gpg
AtomEditor-atom-4C6E74D6C0A35108.pub.gpg: PGP public key block Public-Key (old)

ファイルタイプは"PGP public key block Public-Key"とあります。 これは暗号化でよく聞く公開鍵というやつでしょう。
"PGP"をwikipediaで調べてみると1

Pretty Good Privacy (PGP) is an encryption program that provides cryptographic privacy and authentication for data communication.

やはりデータ通信のための暗号化プログラムのようです。

実際に"AtomEditor-atom-4C6E74D6C0A35108.pub.gpg"ファイルの中身を見てみると、

$ cat AtomEditor-atom-4C6E74D6C0A35108.pub.gpg 
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.11 (GNU/Linux)

mQINBFo0Ix8BEADWFvFinBKSD+0OTCGrY4F+GxdXdZm3tCT0YxSc54phh6JaDGvs
7gkNYNl4nbGPMK7jfN0X859BOFqBUUZ7A49C3fMVtjT7Q5SIrRCRyuHxy+RHs/gi
1+veNxJU5kQLM2RHC0kzOFczGc83JJvuyecDLfRp9DzpgNFG8BunazByfqz5WhFu
~中略~
z2PiG8U/1G4rcGyRaYbh0YA2GzsM9iGLds7YaMRGhMDytNqZOairMdZJRc5u7x4i
Md1AC6VBgFkelmdqGxyFIFqL3OjzgnCA5xjtKyHctxUldkIVPB/Tuso2pWeybzbt
geP9xVV2t32y5Vnm184J09woo9YPSkdHtwhACy8KUFjcTr+gPK4MuDPi
=xIV1
-----END PGP PUBLIC KEY BLOCK-----

膨大な文字列が記載されています。
これが公開鍵、はじめて出会いました。


さて次は、このダウンロードされた公開鍵がsudo apt-key add -へと渡されています。 apt-keyをマニュアルで調べてみると、

DESCRIPTION
       apt-key is used to manage the list of keys used by apt to authenticate
       packages. Packages which have been authenticated using these keys will
       be considered trusted.
~
COMMANDS
       add filename
           Add a new key to the list of trusted keys. The key is read from the
           filename given with the parameter filename or if the filename is -
           from standard input.

パッケージを認証するための鍵リストを管理する機能があるようです。 今回のケースでは”AtomEditor-atom-4C6E74D6C0A35108.pub.gpg”を新たな認証キーとして登録するということなのでしょう。 add -とすることで、標準入力から読み込むことができるようです。


以上より、1行目では新たな認証キーをダウンロード・登録していることが分かりました。


2行目 | aptにAtomリポジトリを登録

それでは2行目に移ります。

$ sudo sh -c 'echo "deb [arch=amd64] https://packagecloud.io/AtomEditor/atom/any/ any main" > /etc/apt/sources.list.d/atom.list'

sh ~からはじまる前半部分の結果が、/etc/apt/sources.list.d/atom.listへと、sudo権限のもとで出力されています。

まずはshコマンドのマニュアルを調べます。

$ man sh
NAME
     dash — command interpreter (shell)
~
-c       Read commands from the command_string operand instead of from the
         standard input.  Special parameter 0 will be set from the
         command_name operand and the positional parameters ($1, $2, etc.)
         set from the remaining argument operands.

dashコマンドのマニュアルに飛びました。 Ubuntuではshdashという名前だそうです2

dashはコマンドインタプリタで、シェルスクリプトの実行などに使われるもののようです。 しかし、ここで-cオプションを与えると、指定したコマンド文字列を実行させることができます。 今回のケースでは'echo "deb [arch=amd64] https://packagecloud.io/AtomEditor/atom/any/ any main" > /etc/apt/sources.list.d/atom.list'が実行される訳です。

こいつは大変面白い工夫です。

例えば今回のこのコマンドをsh -cを使わずに実行してみたとすると、

$ sudo echo "deb [arch=amd64] https://packagecloud.io/AtomEditor/atom/any/ any main" > /etc/apt/sources.list.d/atom.list

となりますが、これはうまく行きません。 リダイレクト> /etc/apt/sources.list.d/atom.listsudo権限が及んでいないため、出力ができないからです。

そこで、echo ~以下のコマンドをすべてひとまとまりとし、sh -cに渡してsudo権限で実行することで、/etc/apt/sources.list.d/atom.listへの出力までを実現できるということでしょう。 実によくできていると思います。

ちなみに、/etc/apt/sources.list.d/atom.listの中身を確認してみると、

$ cat /etc/apt/sources.list.d/atom.list 

deb [arch=amd64] https://packagecloud.io/AtomEditor/atom/any/ any main

たしかに指定した文字列が書き込まれていました。

この書き込まれたURLを見ると、Atomのpackagecloudリポジトリ3が指定されています。 ここからAtomパッケージをダウンロードできます。

つまりこの行では、aptディレクトリにAtomパッケージのリポジトリを登録した、ということになります。


3-4行目 | aptインストール

$ sudo apt update
$ sudo apt install atom

3-4行目でやっていることは、普段aptでパッケージをインストールするのと変わりありません。

aptをアップデートした後、Atomをインストールしています。

以上によって、Atomをインストールできました。


Discussion

今回は、Atom公式の推奨するインストール手順を読み解いてきました。

無事Atomもインストールできましたし、それぞれのコマンド処理内容もとりあえず把握できましたが、まだまだわからないことだらけです。

登録した公開鍵は実際どのようにして、何の認証に使われているのでしょうか。 そもそも、aptインストールとはつまるところ何を行っているのでしょうか。

単なるAtomのインストール作業から、思いもよらぬ謎が豊富に湧き上がってきました。
こういうのも、なかなか面白いことです。


See also

www.bioerrorlog.work

www.bioerrorlog.work