PPA から Git をインストールする
前回で OpenSSH と GnuPG を連携させたのでようやく git で遊べるようになった。
しかし,実際にコマンドを叩いてみたら
$ git version
Command 'git' not found, but can be installed with:
sudo apt install git
またかよ。 嫌な予感しかしない。
$ sudo apt show git
Package: git
Version: 1:2.19.1-1ubuntu1.1
Priority: optional
Section: vcs
Origin: Ubuntu
...
やっぱり。 2.21.0 が出たのってだいぶ前だよな。
いろいろ調べてみたら git に関しては PPA (Personal Package Archive) で最新版のビルドを提供されている方がいるらしい。 ありがたや。
何故か add-apt-repository
は既に入ってるぽかったので,まずはリポジトリを導入しよう。
$ sudo add-apt-repository ppa:git-core/ppa
The most current stable version of Git for Ubuntu.
For release candidates, go to https://launchpad.net/~git-core/+archive/candidate .
詳しい情報: https://launchpad.net/~git-core/+archive/ubuntu/ppa
[ENTER] を押すと続行します。Ctrl-c で追加をキャンセルできます。
ヒット:1 http://jp.archive.ubuntu.com/ubuntu cosmic InRelease
取得:2 http://jp.archive.ubuntu.com/ubuntu cosmic-updates InRelease [88.7 kB]
ヒット:3 http://archive.ubuntulinux.jp/ubuntu cosmic InRelease
取得:4 http://jp.archive.ubuntu.com/ubuntu cosmic-backports InRelease [74.6 kB]
ヒット:5 http://archive.ubuntulinux.jp/ubuntu-ja-non-free cosmic InRelease
取得:6 http://security.ubuntu.com/ubuntu cosmic-security InRelease [88.7 kB]
取得:7 http://ppa.launchpad.net/git-core/ppa/ubuntu cosmic InRelease [20.7 kB]
取得:8 http://ppa.launchpad.net/git-core/ppa/ubuntu cosmic/main i386 Packages [3,032 B]
取得:9 http://ppa.launchpad.net/git-core/ppa/ubuntu cosmic/main amd64 Packages [3,032 B]
取得:10 http://ppa.launchpad.net/git-core/ppa/ubuntu cosmic/main Translation-en [2,248 B]
281 kB を 3秒 で取得しました (81.9 kB/s)
パッケージリストを読み込んでいます... 完了
$ sudo apt update
ヒット:1 http://archive.ubuntulinux.jp/ubuntu cosmic InRelease
ヒット:2 http://jp.archive.ubuntu.com/ubuntu cosmic InRelease
ヒット:3 http://archive.ubuntulinux.jp/ubuntu-ja-non-free cosmic InRelease
取得:4 http://jp.archive.ubuntu.com/ubuntu cosmic-updates InRelease [88.7 kB]
取得:5 http://jp.archive.ubuntu.com/ubuntu cosmic-backports InRelease [74.6 kB]
取得:6 http://security.ubuntu.com/ubuntu cosmic-security InRelease [88.7 kB]
ヒット:7 http://ppa.launchpad.net/git-core/ppa/ubuntu cosmic InRelease
252 kB を 2秒 で取得しました (155 kB/s)
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
パッケージはすべて最新です。
$ sudo apt upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
$ sudo apt show git
Package: git
Version: 1:2.21.0-0ppa1~ubuntu18.10.1
Priority: optional
Section: vcs
よし。 最新版が入ってるな。 インストールっと。
$ sudo apt install git
これでインストール完了。 動作確認してみる。
$ git version
git version 2.21.0
よしよし。 おっと,初期設定しないと。
$ git config --global user.name "Alice"
$ git config --global user.email "alice@example.com"
$ git config --global user.signingkey 697CDD8A
$ git config --global commit.gpgsign true
SSH 経由で git clone する
まずは適当なリポジトリを SSH 経由で git clone してみる。
$ git clone git@github.com:spiegel-im-spiegel/gocli.git github.com/spiegel-im-spiegel/gocli
Cloning into 'github.com/spiegel-im-spiegel/gocli'...
The authenticity of host 'github.com (192.30.255.112)' can't be established.
RSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.255.112' (RSA) to the list of known hosts.
remote: Enumerating objects: 71, done.
remote: Counting objects: 100% (71/71), done.
remote: Compressing objects: 100% (52/52), done.
remote: Total 246 (delta 31), reused 53 (delta 16), pack-reused 175
Receiving objects: 100% (246/246), 53.99 KiB | 431.00 KiB/s, done.
Resolving deltas: 100% (107/107), done.
前回で OpenSSH と GnuPG を連携させたので認証時に Pinentry が起動する。
よーし,うむうむ,よーし。
git-credential による認証管理
SSH 経由でリポジトリにアクセスする場合はこれでいいのだが HTTPS 経由でアクセスする場合はアクセスするたびに毎回パスワードを訊かれるため鬱陶しい。 この場合は git-credential による認証管理を行うのがいいようだ。
Ubuntu では gnome-keyring を使った認証管理が使える。
これによると
ということらしい。 さっそくやってみよう。
$ cp -r /usr/share/doc/git/contrib/credential/gnome-keyring ~/work
$ cd ~/work/gnome-keyring
$ make
gcc -c -g -O2 -Wall -o git-credential-gnome-keyring.o git-credential-gnome-keyring.c
git-credential-gnome-keyring.c:28:10: fatal error: glib.h: そのようなファイルやディレクトリはありません
まじすか。 まぁ,入れればいいか。
$ sudo apt install libglib2.0-dev
では再開。
$ make
gcc -c -g -O2 -Wall -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -o git-credential-gnome-keyring.o git-credential-gnome-keyring.c
git-credential-gnome-keyring.c:29:10: fatal error: gnome-keyring.h: そのようなファイルやディレクトリはありません
ええい。 これも入れればいいのね。
$ sudo apt install libgnome-keyring-dev
$ make
gcc -g -O2 -Wall -I/usr/include/gnome-keyring-1 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -o git-credential-gnome-keyring.o -c git-credential-gnome-keyring.c
ワーニングいっぱい出たけどようやく通ったよ。
これで作成された git-credential-gnome-keyring
をパスの通ったディレクトリに入れれば完了。
git 側が認識しているか確認してみよう。
$ git help -a | grep credential-
credential-cache Helper to temporarily store passwords in memory
credential-store Helper to store credentials on disk
credential-gnome-keyring
よしよし。 認識しているな。
これで git 設定に以下を加えれば完了となる。
$ git config --global credential.helper gnome-keyring
適当なリポジトリで確かめてみよう。
$ git clone https://github.com/spiegel-im-spiegel/private-repos.git aaa
Cloning into 'aaa'...
Username for 'https://github.com': alice@example.com
Password for 'https://alice@example.com@github.com':
remote: Enumerating objects: 51, done.
remote: Counting objects: 100% (51/51), done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 51 (delta 8), reused 47 (delta 8), pack-reused 0
Unpacking objects: 100% (51/51), done.
$ git clone https://github.com/spiegel-im-spiegel/private-repos.git bbb
Cloning into 'bbb'...
remote: Enumerating objects: 51, done.
remote: Counting objects: 100% (51/51), done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 51 (delta 8), reused 47 (delta 8), pack-reused 0
Unpacking objects: 100% (51/51), done.
よし。 2回目からは訊いてこないな。
ちなみにこのときのパスワードは Web ページにサインインするときのパスワードじゃなくて,設定画面で振り出した personal access token を使うのでご注意を(つか,私がすっかり忘れててハマったのだがw
)。
【追記】 Libsecret を使う
gnome-keyring の代わりに libsecret を使う方法もあるようだ。
$ sudo apt show libsecret-1-dev
Package: libsecret-1-dev
Version: 0.18.8-1
Priority: optional
Section: libdevel
Source: libsecret
Origin: Ubuntu
...
既定では入ってないっぽいのでインストールする。
$ sudo apt install libsecret-1-dev
以降は nome-keyring のときと同じ
$ cp -r /usr/share/doc/git/contrib/credential/libsecret ~/work
$ cd ~/work/libsecret
$ make
gcc -g -O2 -Wall -pthread -I/usr/include/libsecret-1 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/uuid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -o git-credential-libsecret.o -c git-credential-libsecret.c
gcc -o git-credential-libsecret git-credential-libsecret.o -lsecret-1 -lgio-2.0 -lgobject-2.0 -lglib-2.0
おおっ。 ワーニングが出ない。 こっちのほうがいいかな。
ビルドした git-credential-libsecret をパスの通ったディレクトリに入れれば完了。 Git 側が認識しているか確認してみよう。
$ git help -a | grep credential-
credential-cache Helper to temporarily store passwords in memory
credential-store Helper to store credentials on disk
credential-libsecret
あとは git の設定に組み込めば終了。
$ git config --global credential.helper libsecret