Sonyのα6400を買った
はじめに
カメラが欲しかったのでSONYのα6400を買いました。
なのでどんなOSSを使っているのかをちょっとだけ眺めてみることにしました。
最初に断っておきますが筆者は組み込み機器のことを全然知らないので、「何言ってんだこいつ、なんでこんな基本的なことも知らないんだ」と思われたかたは訂正していただけると助かります。もう一点、この文書は細かいことにこだわらずにフィーリングで読んだことのメモ書きに過ぎないのでとくに自分以外の読者への読みやすさには配慮していませんし、内容の正しさの保証もしていません。
OSSとSONY製品、およびα6400
SONY製品は他の家電製品の例にもれずにOSSをたくさん使っており、必要とあらば製品に組み込まれたOSSのソースコードを公開しています。
これは別に隠しページとかではなく、「sony open source」とかでぐぐればトップに出てきます。
α6400付属OSSのソースはここにあります。
α6400はどんなOSSを使っているのか
ソースコードの一覧は次の通りです。
compat-wireless.tar.gz linux-kernel.tar.gz qrencode.tar.gz R8168-Driver.tar.gz sony-target-dev-busybox-1.13.4-08020205.src.rpm sony-target-dev-busybox-1.13.4-08020504.src.rpm sony-target-dev-dosfstools-2.11-08020202.src.rpm sony-target-dev-dosfstools-2.11-08020502.src.rpm sony-target-dev-e2fsprogs-1.42-08020502.src.rpm sony-target-dev-gcc-gplv3-libs-4.5.1-08020202.src.rpm sony-target-dev-gcc-gplv3-libs-4.5.1-08020502.src.rpm sony-target-dev-glibc-2.11.2-08020205.src.rpm sony-target-dev-glibc-2.11.2-08020503.src.rpm sony-target-dev-hostname-3.05-08020502.src.rpm sony-target-dev-iptables-1.4.10-08020502.src.rpm sony-target-dev-libnl-3.2.22-08020502.src.rpm sony-target-dev-procps-3.2.7-08020202.src.rpm sony-target-dev-procps-3.2.7-08020502.src.rpm sony-target-dev-pump-0.8.16-08020502a.src.rpm sony-target-dev-rpm-4.4.2.3-08020502.src.rpm sony-target-dev-util-linux-ng-2.17.2-08020502.src.rpm
個々のソースについて細かく見るのではなく、どんなOSSのどのバージョンを使っているのかくらいだけを確認だけしました。興味の無いソフトについては飛ばしてます。
linux-kernel.tar.gzというのはその名の通りlinuxのカーネル(以後"linux"と表記)ですね。最近は多くの家電製品にlinuxが採用されていますが、α6400も同様なようです。ちなみにlinuxのライセンスはGPL v2なので、SONYとしては製品を買った人にしかソースを公開する義務はないのですが、誰にでも見られるようにしてくれているようです。やったぜ。カーネルバージョンは3.0.27。3.0が2011年7月に出たもので、3.0.27は2012年4月に出たものです。うーん、7年ものか、古い。伝説に聞く「組み込み系機器に積んであるソフトは古い」というのが確かめられたぞ。そういえばセキュリティパッチはどこまで当たってるんですかね。diffがでかすぎるので追ってませんが、ちゃんと当てるべきものは当たっていることを望みます。なお、そうでない場合にどうなるかというとファインダー越しにDOOMが動くようになったりします。
compat-wirelessは新しいカーネルから古いカーネル用に無線LANのドライバをバックポートしたものです。とうの昔にバックポート対象が無線LANだけにとどまらず他のドライバにも及んで名前もbackportsに改められたはずが、昔の名前で出ています。古い。ちなみにこのパッケージを展開するとcompat-wireless-3.5.4-1-brcmという名前になりました。多分Broadcomの機器を積んでいるんでしょう。
qrencodeはQRコード生成ライブラリです。α6400にはスマホからQRコードを利用して本体と接続してデータをやりとりする機能があるので、それ用だと思います。
R8168-DriverというのはRealtek社のコントローラ(いわゆるカニチップ)を積んだNICのドライバでしょう…と、ここまで書いて思ったのですが、何で(少なくとも見かけ上は)Ethernetポートが存在しない機器にNICのドライバが必要なんだろう?
その他のソフトウェアについては理由はよくわかりませんがソースがsrpmとして提供されています。ソフトウェアによっては複数バージョンが存在することもありますが、番号が大きなほうだけを気にすればいいのかしら。0802...と続く部分は単に日付とも思えないし、一体何を意味するものなのだろうか。
busyboxはlinuxの基本コマンドをシングルバイナリに詰め込んだものです。GNUツールの*-utilsなどのフルセットを持つよりもはるかに小さなサイズで最小限のことができるので組み込み機器などにおいて重宝されます。1.13.4というバージョンは2009年4月に出たものらしいです。うーん、これも古い。
dosfstoolsはFATなどのファイルシステムを操作するためのソフトウェアです。おそらくは本体に挿したSDカード上に存在するFATファイルシステムの操作をするために存在するのでしょう。
e2fsprogsはext系ファイルシステムを操作するためのソフトウェアです。おそらく本体に内蔵されているlinuxシステムのrootfsがext系ファイルシステムなのでしょう。
おわりに
噂には聞いていましたけどソフトウェアのバージョンがどれもこれも古いですね。私の慣れ親しんできたエンプラlinuxの世界でもカーネルバージョンが古い古いとよく言われますが、組み込み機器においてはさらに古いようです。別にけなしているわけではなくて、単に「ほんとにそうだったんだ」とびっくりしているだけです。いい経験になりました。
では、α6400で写真撮ってきます。
「しくみがわかるkubernetes」を読んだ
Kubernetesとはそもそも何者なのか、何のためにどういう設計思想で作られたのか、どうやって使えばいいのか、どういうしくみになっているのか、などなどについて書かれた本です。一言でいうと非常によい本でした。Kubernetesに関する良い本はたくさんありますが、私が読んだ中で下記対象読者(本文より引用)にとってこの本が最適だと思います。
Kubernetesをはじめて使う業務アプリケーション開発者 Dockerの基礎知識がある方
とにかく上記の対象読者の気持ちに寄り添って、Kubernetesの「最低限ここだけは理解しないと話にならない」という部分にだけ的を絞って最短経路で理解してもらいたい、という気持ちがにじみ出ていました*1。他のKubernetes本を見たものの難しすぎて挫折したというかたでも、この本を読んだ上でもとの本に戻ると驚くほど理解しやすくなると思います。Kubernetesを直近で使うことは無くても流行っているからちょっと調べておきたい、というかたにもよいと思います。
本書はKubernetesおよびそれを構成する個々のコンポーネントを説明するにあたって、単に機能説明をするだけにとどまらず、なぜそれが必要なのか、どういう場面でどうやって使うのか、どういうしくみになっているのか、が必ず書かれているため、非常に読みやすい、かつ、腑に落ちやすい作りになっています。初心者が抱きがちな疑問についてもちょうどいいタイミングで回答されていたりと、至れり尽くせりです。
しくみの部分については初心者用の書籍であることやページ数の都合もあり、書いてあることはあくまで概略なのですが、今後他の文書やソースコードを読むときに強い味方になってくれるでしょう*2。Kubernetesの複雑なしくみをよくぞここまで簡略化して説明できるものだと、思わず唸ってしまいました。
Kubernetesを使う上で必要な、重要な設計上の判断が必要になったときの対処方法についても本書は書いてくれています。たとえば本書においては物理的なクラスタ構成をどうするか、どのように計算リソース(CPUやメモリなど)を制御するか、などについて触れられています。これらについても決して「こうでなくてはならない」と筆者の意見を押し付けることなく、判断するための基準、および複数の選択肢を提示したうえで「自分ならこうする」という書き方をしています。こういう書き方を「はっきり書いてよ」と嫌うかたもいるとは思いますが、私はこれがよいと思います。なぜかというと、個々人によって置かれた状況は違うので、安易にその状況を知らない人(この場合は著者)がこうすべき、などと言ってもしょうがないからです。
副題に「Azureで動かしながら学ぶ」と書いてある通り、本書は演習においてMicrosoftのAzure、とくにKubernetesクラスタを容易に作成、管理できるマネージドサービス、Azure Kubernetes Engine(AKS)を使っています。この手の書籍は特定の製品に依存しないほうが好ましいのですが、本書についてはこれでよいと思います。というのもKubernetesは巨大なせいもあってフルスクラッチでクラスタを作るのは死ぬほどめんどくさくて*3苦行だからです。初心者にそこからやらせるとそれだけで嫌になってしまうことうけあいです。それよりはクラスタ構築の詳細については全く触れないと割り切ってマネージドサービスを使うほうがよいでしょう。クラスタを構築した後の演習内容はおおよそAKSに依存していない内容なので、Azureが気に入らなければGCPやAWSなどの他の業者のサービスを使うなり、自前でクラスタを用意するなりすればいいと思います。
Azureを使っていることについてもう一点。著者のおふたりはAzureを提供しているMicrosoft社所属です。このような場合、わたしは「もしや"Azure売らんかな"の精神で書かれたAzure礼賛本ではなかろうか」と身構えてしまうのですが、本書はまったくそんなことはなく、安心して読めました。前節において述べたように一旦クラスタを用意してしまえば後はAzure依存部分はほとんど無いですし、かつ、Azureのサービスについても、あくまで複数ある選択肢の一つとして提示されているに留まっていました。よくある技術書の名を借りた営業パンフレットのような本にありがちな臭みは感じませんでした。
最後に余談。本書は「kubernetesについての入門書を私が書くとしたらこうなる」というつくりになっていたので非常に驚きました。私は普段から何かを学ぶときには関連書籍や記事をたくさん読み込んで咀嚼した上で自分なりの教科書にまとめてアウトプットするのですが、今回はこの本にだいたいそのアウトプットに近いものがまとまっているので、書く手間が省けたと思いました。
*1:テクニカルライターとしては、「ここは書きたかったけども断腸の思いで削ったのだろうなあ」というのが透けて見えて面白かったです
*2:Kubernetesは変化が速いのであまり詳細に書いてもしょうがないという面もあると思います
*3:少なくとも私にとっては
microk8sアンインストール時に発生する不具合と解決方法
1ノードのk8sクラスタを簡単に作るmicrok8sという便利アプリがsnapで公開されています。それを使っているときにちょっとした不具合を見つけたのでメモ
- 1/29 更新: PR投げた
問題要旨
microk8sのアンインストールに失敗する
発生条件
/var/snapのファイルシステムがBtrfs
問題が発生したソフトウェアのバージョン
- Ubuntu 18.04
- snap: 2.36.3
- microk8s: v1.13.2
- kernel: 4.15.0-43-generic
再現方法
インストール後にpodを一回でも立ち上げた後で(一つでもimageを作った後で)アンインストールする。
$ sudo snap remove microk8s
期待される結果
アンインストールが成功する。
実際の結果
以下のようなメッセージと共にアンインストールが失敗する。
$ sudo snap remove microk8s error: cannot perform the following tasks: - Remove data for snap "microk8s" (383) (remove /var/snap/microk8s/common/var/lib/docker/btrfs/subvolumes/<id>: operation not permitted)
原因
microk8sのアンインストール時には.../subvolumes/以下に配置されたコンテナイメージをsnapがrmコマンドによって削除しようとしているが、これらのイメージはbtrfsのサブボリュームであり、かつ、kernel 4.15系ではサブボリュームはrmコマンドでは削除できない。
解決方法
アンインストール時にsubvolumeを削除する
回避方法
2つの方法がある。
microk8sのコンテナ用snapshotを自力で削除する
アンインストールの前に次のようなコマンドを発行すればよい。
for i in $(sudo ls /var/snap/microk8s/common/var/lib/docker/btrfs/subvolumes/) ; do sudo btrfs sub del /var/snap/microk8s/common/var/lib/docker/btrfs/subvolumes/$i ; done
この後アンインストールすれば削除すべきイメージは既にないのでアンインストールは成功する。
$ sudo snap remove microk8s microk8s removed
kernelを4.18以上にアップデートする
$ uname -r 4.18.0-13-generic $ sudo ls /var/snap/microk8s/common/var/lib/docker/btrfs/subvolumes/ <id 0> <id 1> $ sudo snap remove microk8s microk8s removed $
なぜカーネルのバージョンアップで問題が解決するかというとkernel 4.18においてrmdir() syscallによって空のサブボリュームを削除できるようになったからです。
on user demand, rmdir() is able to delete an empty subvolume, export the capability in sysfs
ちなみにこの修正をしてくれたのはFujitsuのTomohiro Misonoさんというかたです。すごいぞMisonoさん。
今後の予定
microk8sのアンインストール時に動作するスクリプトを修正するpull requestをupstream communityに出したので、待ち状態。
「時間とはなんだろう」を読んだ
数学や物理があまりわからない人向けにややこしい話抜きで時間とは何かについて書いた本です。わたしは数学や物理がわからないしこの本に書いてあることをほとんど知らなかったのでなかなかおもしろかったです。ただし、とくに前半、例えがわたしにとって身近ではないものが多くてピンと来なかったです。このへんは好みでしょう。
ノイズキャンセリングヘッドホンを買ったらよいものだった
ノイズキャンセリングヘッドホンのWH-1000XM3を買ったらとてもよかったという話です。
聴覚過敏で雑音が嫌いなので前々からこの手の製品は気になっていたのですが、人に勧められたこれを買ってみました。主目的は音楽をかけることではなく雑音を減らして生きやすくすることです。
主な感想は次の通り。
- とにかく雑音が無くなって集中できる、かつ、精神的ストレスが減る。昔ド田舎の駅に行ったときに無音の世界を体感したことがあるのだが、つけた瞬間にそのときのことを思い出した
- 実は家の中でも音楽をかけていないときにも細かい雑音は発生している
- 爆音で音楽を鳴らして雑音を消しているときよりも疲れない
- イヤーマフだけでほとんどの操作できるので楽(細かい設定はスマホアプリを使う)
私にとっては副次的なものですが、音も良いと感じました。
昔ノイズキャンセリングイヤホンを一つ持っていたのですが、それを手放す原因となっていた問題がすべて解決されていたのもよかったです。
- 電池が4時間しか持たない => 30時間持つ
- 音楽を鳴らさずに数分経つと電源が切れる => 音楽をかけていなくてもノイキャンだけ有効な状態でいられるように設定変更できる(デフォルトは数分で切れる)
- (ノイズキャンセルどうのでなくイヤホンとヘッドホンの違いだが)取り外しが面倒 => 使わないときは外して首にかけていればよいので楽
などなどわたしにとっての良さを色々と列挙しました。雑音大嫌いな私のような人は持っていて損はないかと思いましたが、どこにいても雑音が気にならないというかたにはどれだけ効果的かはわかりません。
余談。古い機種を持っていたらそれを下取りに出して新しいのを買えるというしくみが用意されているようで「なるほど上手い」と思ってしまいました。
新しいPCを初めて起動した話
去年の末にLinuxデスクトップ用にと買ったものの一度も起動していなかった下記PCをようやく起動しました。
いろいろカスタマイズできた中でわたしは次のような構成にしました。一番いいやつではないけど、これだけあったら十分かな、といった程度。
● AMD Ryzen 5 PRO 2400GE (3.20GHz, 4MB) ● 16GB PC4-21300 DDR4 SODIMM (8GBx2) ● 内蔵グラフィックスカード ● 256GB ソリッドステートドライブ M.2 2280 NVMe ● 内蔵ギガビットイーサネット ● IEEE 802.11 ac/a/b/g/n ワイヤレスLAN (WiFi準拠)1x1, Bluetooth 4.2 ● 内部モノラルスピーカー ● HDMIポート
もともとこれを買った理由が先代のマシンはハイスペックだったもののデカくて持て余していたため、小さいのに変えようと思ったことです。今後マシンパワーが必要になったら都度GCEの高性能なインスタンスでも借りればよいかなと。
サイズは売り文句通り余裕で手のひらに乗せられるし場所をとらないので非常にいいです。実のところこいつが届いたときに「サイズが小さい!すごい!」で完璧に満足してしまったのが使用開始をさぼっていた理由の一つだったりします。
Linuxのインストールは何度か起動中に次のエラーメッセージを吐いて動かなくなったものの、再起動をすると治りました。別にこだわるところではないしカーネルも問題が出ないバージョンに上げたので、これでよし。
その後カーネルビルド(v4,.19のdefconfig)してみると226秒かかりました。先代のマシン(Ryzen 1800X)はバージョンが若干古いカーネルで75秒ほどで終わっていました。おおよそ3倍強かかっています。スペックではなく省サイズと静穏性で選んだのでまあ、こんなものかなと。
それにしても小さくてよい。
去年の個人事業の振り返り
去年個人事業主として何をやったのかの一覧と、やってみての感想。
やったことはおおよそ次の通り。
- 現在働いている会社における技術顧問業(4月までで終わり)
- 拙著「Linuxのしくみ」の印税
- Software Designでの連載「Linuxのしくみ」の原稿料(5月から)
- セキュリティキャンプ全国大会2018の講師
- 技術同人誌販売(春秋の技術書典とオンライン販売)
このような組み合わせになったのには次のような事情があります。
- IT技術、物を書くこと、人に伝えることが好き
- 好きなことだけしたい
- 売れなければキャッシュアウトになるようなリスクはなるべく負いたくない。たとえば在庫を抱えるとか
- なるべく好きな時に好きなだけ好きなところで働きたいので、空間的、時間的な制約を強く受けることはしたくない
稼いだ金額については具体的な数値は書きませんが、幸いにもこれだけでなんとか家族が生活できるかなあというくらいにはなりました。ただ、来年以降どうなるかはあんまり読めません。とくに本の印税については去年出したものが今年同じくらい売れるとは到底思えないので、次のを出さなければ収入激減です。
一年を振り返って思ったことは次の通り。
- お金が流れるしくみがある程度見えてくるので面白い
- 仕事してからキャッシュインまでの時間が数か月というケースもあるので、手元にある程度運転資金が無いと辛そう
- 「会社員って(毎月一定の給料が入るという意味では)気楽なんだな」ということを強く感じた
- 厚生年金すばらしい。よく聞く「個人事業主は会社員の倍は稼いでおきたい」というがよくわかるようになった
- IT系の物書きだけで生計を立てるのは無理ゲー
今年も無理しない程度に去年と似たようなことをしてお金を稼いでいきたいなあと思います。