git clone が公開鍵のエラーで失敗する場合の対処方法

以下は Debian 9 Stretch の amd64 版のはなし。
以前 github から clone する際に以下のような公開鍵のエラーが発生してclone に失敗することがあった。

gnutls_handshake() failed: Public key signature verification has failed.

その時はこちらのページを参考にして、

https://nyacom.net/?p=480

git の Debian パッケージが依存している libcurl4-gnutls-dev を libcurl4-openssl-dev に変更してパッケージをビルドして解決していた。

だが、パッケージを hold 設定するのを忘れていて、apt-get upgrade したらオリジナルの gnutls 版の git がインストールされてしまい、再び clone できなくなってしまった。(できる場合もあった)

再度手動でパッケージを作成するのは面倒だなぁと思っていたところ、 reddit でビルドスクリプトの紹介があったのでこれを使用して、再び openssl 版 git のパッケージを作成する。

https://www.reddit.com/r/linuxquestions/comments/6ttzio/problem_with_git_on_debian_91_strech/

https://gist.github.com/pescobar/6ae5634f92d75d23c36a

ビルドスクリプトのダウンロードと、openssl 版 git のビルド

$ wget https://gist.githubusercontent.com/pescobar/6ae5634f92d75d23c36a/raw/829004bf2a2893a2cbc34f6a7b39bfd8b997d4be/build-git.sh
$ bash build-git.sh

ビルドしたパッケージのインストール(Ubuntu の場合はスクリプト内でインストールしてる)

$ cd soure-git
$ sudo dpkg -i ./*.deb

いくつかのパッケージがインストールに失敗したが、使用する予定がないので完全に削除する。

$ sudo apt-get --purge remove git-mediawiki git-svn git-all

残りのパッケージを hold するにあたり、まずはパッケージリストを作成。

$ dpkg -l | grep git | grep 2.14.2 | awk '{printf $2 " "}' > git_hold.list
$ cat git_hold.list
git git-core git-cvs git-daemon-run git-dbgsym git-doc git-el git-email git-gui git-man gitk gitweb

root になり、パッケージリスト内のパッケージを hold する。

$ su
# for i in $(cat ./git_hold.list); do echo $i hold | dpkg --set-selections ; done

hold されたはずのパッケージを確認する。これらのパッケージは今後 apt-get upgrade してもアップグレードされない。

# dpkg -l | grep git | grep 2.14.2 | awk '{print $2}'
git
git-core
git-cvs
git-daemon-run
git-dbgsym
git-doc
git-el
git-email
git-gui
git-man
gitk
gitweb

hold の確認はこっちが確実。先頭が hi なら hold 済み。(ii なら hold されていない)

$ dpkg -l | grep git | grep 2.14.2  | awk '{print $1 " " $2}'
hi git
hi git-core
hi git-cvs
hi git-daemon-run
hi git-dbgsym
hi git-doc
hi git-el
hi git-email
hi git-gui
hi git-man
hi gitk
hi gitweb

適当なリポジトリを clone できるかテストして完了。

$ git clone https://github.com/nkon/rust_blinky.git
Cloning into 'rust_blinky'...
remote: Counting objects: 226, done.
remote: Total 226 (delta 0), reused 0 (delta 0), pack-reused 226
Receiving objects: 100% (226/226), 575.37 KiB | 554.00 KiB/s, done.
Resolving deltas: 100% (93/93), done.
$ 

Debian Stretch に Docker を再インストール

Debian を Wheezy -> Jessie(testing) -> Stretch とアップグレードしているうちに Docker が動かなくなっていたのを直した。 あまり関係ないと思うが、kernel は Jessie の 3.16.0 を使っており、厳密には Stretch とは環境が異なる。

$ uname -a
Linux t440s 3.16.0-4-amd64 #1 SMP Debian 3.16.51-2 (2017-12-03) x86_64 GNU/Linux

Docker のページに書いてある Debain の apt-line を入れても公開鍵の認証に失敗して amd64 のパッケージを取得できない。 仕方ないのでパッケージを直接インストールする。

https://docs.docker.com/engine/installation/linux/docker-ce/debian/

$ wget https://download.docker.com/linux/debian/dists/stretch/pool/stable/amd64/docker-ce_17.09.1~ce-0~debian_amd64.deb
$ sudo dpkg -i docker-ce_17.09.1~ce-0~debian_amd64.deb

インストールプロセスの最後で systemd による dockerd の起動に失敗する。これはDocker 用の設定がないからなので作成する。 ここを参考にした。 https://forums.docker.com/t/failed-to-start-docker-application-container-engine/35594

$ sudo sh -c 'mkdir /etc/systemd/system/docker.service.d'
$ sudo sh -c 'touch /etc/systemd/system/docker.service.d/hosts.conf'
$ sudo cat /etc/systemd/system/docker.service.d/hosts.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2736

systemctl status docker.service しても /var/lib/docker/ の permission がうんたらと怒られる。 よくわからないが、strace しても /var/lib/docker/ への何かで失敗している。

$ ls -al /var/lib/ | grep docker
drwx--x--x 12 root       root         136 12月 10 01:45 docker

/var/lib/docker/ には以前のバージョンで使用していたファイルが残っているので削除して作り直す。 ディレクトリ内に aufs のマウントポイントがあるので umount してから。

$ sudo umount /var/lib/docker/aufs
$ sudo rm -rf /var/lib/docker
$ sudo mkdir /var/lib/docker

ここで再度 Docker をインストールする。

$ sudo dpkg -i docker-ce_17.09.1~ce-0~debian_amd64.deb

今度は完了した。

$ docker run  -p8080:80 -d  nginx:latest
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
bc95e04b23c0: Pull complete
f3186e650f4e: Pull complete
9ac7d6621708: Pull complete
Digest: sha256:b81f317384d7388708a498555c28a7cce778a8f291d90021208b3eba3fe74887
Status: Downloaded newer image for nginx:latest
fb632e455394eeee49c15179fc0dd77daf0933ffb5dcf938ee2bcfde7d6eaa5d
$ w3m http://localhost:8080

ずっと気になっていたのですっきりした。 Jupyter Notebook とか ROS2 とか Redash など、Docker 上でいろいろ試していきたい。

エクスペリメントを見てきた

実在の「スタンフォード監獄実験」をテーマにした映画。

この実験はある集団を囚人と看守に分類し、それぞれの役割を演じさせた場合の反応を 14 日間観察する。
Wikipedia によると実験の意図は

普通の人が特殊な肩書きや地位を与えられると、その役割に合わせて行動してしまう事を証明しようとした実験が行われた。

スタンフォード監獄実験 - Wikipedia
とのこと。過去に本で読んだので話は知っていた。

この実験は初期状態で平衡している囚人と看守間のパワーバランスの変化を期待するわけなので実験に影響を与えうる属性を持つ人間は被験者に適さない。実際に選考段階でそれを判断していると思われる場面もある。

しかし、主要人物の一人に与えられた属性は結果的に適切ではなく、それを示す描写も複数ある。囚人と看守が入れ替わっても同じ事が起こる可能性がある点が実験から得られた知見なのだが、演出によりそれが薄らぐことになり残念である。特殊な状況により潜在的欲求が出現した被験者を意図的に含めたとも解釈できるので一概に演出が悪いともいえないが。

因みに実験は 6 日で中止されたというのがこの映画のコピーなのだが、Wikipedia によると実験者側による自発的な中止ではなかったようだ。

決して愉快な気分になる映画ではないが、この手の話題には興味があるので楽しめた。

MediaWiki のインストールメモ

Lenny で試した。

  • インストールする。
apt-get install mediawiki

http://lists.debian.or.jp/debian-users/200902/msg00108.html

debian:/etc/mediawiki# diff -u  apache.conf~ apache.conf
--- apache.conf~        2010-04-18 07:21:29.000000000 +0900
+++ apache.conf 2010-10-11 02:59:11.000000000 +0900
@@ -1,6 +1,6 @@
 # Uncomment this to add an alias.
 # This does not work properly with virtual hosts..
-#Alias /mediawiki /var/lib/mediawiki
+Alias /mediawiki /var/lib/mediawiki

 <Directory /var/lib/mediawiki/>
        Options +FollowSymLinks
debian:/etc/mediawiki#
  • ここを見て MySQL の設定

http://www.mediawiki.org/wiki/Manual:Installing_MediaWiki/ja

  • 初期設定

DB 名:wikidb
pass: DB 設定時と同じやつ。

  • コンフィグファイルをいかのようにコピーする。(恐らくこれは Debian 固有)
cp /var/lib/mediawiki/config/LocalSettings.php /etc/mediawiki/

P版.com 価格調査

P版.com が昔より安くなっているような気がしたので価格を調べた。最低価格の場合。6 層以上は RoSH 対応、BGA x3 の実装見積もりも含む。2010/10/10 時点で調査。

2 層

  • 基本条件
    • 外形寸法 100mmx100mm
    • 層数 2層
    • レジスト 両面
    • シルク 両面
    • 製造数 4 枚
    • 最小パターン幅 0.127mm
    • 表面処理 半田レベラー(有鉛)
    • V カット 5 本
  • 納期 ノーマル 5 日(台湾)
  • 金額 \24,578

2 層、RoSH 対応

  • 基本条件 + 以下
    • 表面処理 ハンダレベラー(鉛フリー)
  • 納期 ノーマル5日(台湾)
  • 金額 \29.093

4 層

  • 基本条件 + 以下
    • 層数 4層
  • 納期 ノーマル 7 日(台湾)
  • 金額 \38,430

4 層、RoSH 対応

  • 基本条件 + 以下
    • 層数 4層
    • 表面処理 ハンダレベラー(鉛フリー)
  • 納期 ノーマル 7 日(台湾)
  • 金額 \42,945

6 層、RoSH 対応

  • 基本条件 + 以下
    • 層数 6 層
    • 表面処理 ハンダレベラー(鉛フリー)
    • 実装方法 マウンター
    • BGA 3
    • 半田 鉛フリー
    • メタルマスク マスク用ガーバーデータから製造
    • 無料提供部品 あり
  • 納期 ノーマル 8 日(台湾) + 実装 6日
  • 金額 \129,337 = \64,260(基板) + \58,919(実装)

8 層、RoSH 対応

  • 基本条件 + 以下
    • 層数 8 層
    • 表面処理 ハンダレベラー(鉛フリー)
    • 実装方法 マウンター
    • BGA 3
    • 半田 鉛フリー
    • メタルマスク マスク用ガーバーデータから製造
    • 無料提供部品 あり
    • 表面処理 ハンダレベラー(鉛フリー)
  • 納期 ノーマル 8 日(台湾) + 実装 6日
  • 金額 \153,865 = \87,620(基板) + \78,858(実装)

Beagleboard-xM に Debian Squeeze をインストール

  • SD カードを mount 可能な Debian マシンを用意する。

AMD64 の Squeeze マシンを使用した。

  • ここを読む。

http://elinux.org/BeagleBoardDebian#Debian_Squeeze

  • 入ってなさそうなパッケージはあらかじめ入れておく。
# apt-get install bzr parted uboot-mkimage
  • インストール用 SD を作成する

https://code.launchpad.net/~beagleboard-kernel
からインストーラを取得して serial 用のインストーラを作成する。

# bzr branch lp:~beagleboard-kernel/+junk/debian-di
# cd debian-di
# ./mk_mmc.sh --mmc /dev/sdX --distro squeeze --firmware --serial-mode
  • Micro SD を -xM に挿して起動し、シリアルコンソールから di を操作する。
    • xM の物理 Ether はインストール時に使えないっぽいが、USB-Ether アダプタ(ETX2-US2 とか) を挿しておくと eth0 が認識されるのでそれを利用する。
    • 途中画面が乱れたら Ctrl-L する。
    • tasksel で最低限の項目を選択するとインストール終了後に 450MB 程度消費していた。

起動後は 600MHz で動いているみたい。

[    0.000000] Clocking rate (Crystal/Core/MPU): 26.0/332/600 MHz

1GHz で動作させるには u-boot のソースを変更する必要がありそう。

Squeeze で Mozc

ノートを Windows 7 から Squeeze にしたので Mozc を build した。svn から checkout したバージョンは 0.12.410.102 だった。

以下の URL にある Debian package の作り方で大体正しいので出来たパッケージをインストールすればよい。
http://code.google.com/p/mozc/wiki/LinuxBuildInstructions
Squeeze が testting のせいか ibus の依存関係が解消できなかったが、

$ sudo apt-get install python-ibus python-notify ibus-gtk ibus-qt4 libibus-qt1 ibus

などとしたらうまくいった。その後 SCIM の設定で Mozc を選択して reboot した。これも Mozc で書いてる。

# 「らいぶろっくにっき」程度には何か書くということで。