ラベル 技術 の投稿を表示しています。 すべての投稿を表示
ラベル 技術 の投稿を表示しています。 すべての投稿を表示

2016/04/04

Docker registry を構築した後のimage整理

Docker registry を作って、別チームに任せて放置する

Docker registry で image 管理をすると段々とゴミが溜まってきます。API(https://docs.docker.com/v1.6/reference/api/registry_api/#delete-a-repository)で削除できるのはTAGがついているimageだけなので、
TAGが外れているimagesがどんどん残っていきます。

エラーが起きる

ずーっと管理せずに放置していると、ある日こんなエラーと出会います。

HTTP code 500 while uploading metadata: "invalid character '<' looking for beginning of value"

これは、message push しようとしたり、する必要があるかをregistryに確認したところ、正常なjsonレスポンスではなく、htmlのエラーページが帰ってきたため起きたエラーです。

不要なimageを削除する。

以下スクリプとが非常に有用です。
jqのインストールが必須になります。

kwk/remove-orphan-images.sh
https://gist.github.com/kwk/c5443f2a1abcf0eb1eaa

追記:実行時のエラー

私の場合、実行時に下記エラーが出ました。

parse error: Invalid numeric literal at line 144, column 114

これは直前に表示されたrepository名のindexファイルが破損していたため、起きた現象でした。手修正でindexファイルを修正したところ、うまく動きました。

2016/02/18

LMDE2とデュアルブートしているwindows 7 を 10 にアップグレードする

結論から言うと、特に何も問題なく、あっさりアップグレードできました。

参考にしたのは以下のページ
How to Upgrade a Linux Dual-Boot System to Windows 10
http://www.howtogeek.com/226295/how-to-upgrade-a-linux-dual-boot-system-to-windows-10/

環境

まず私の環境を再度確認。
Windows 7 SP1 と LMDE2 とのデュアルブート環境。
Windows の Cドライブが入っている物理ストレージに LMDE2 を同居かつ、GRUB2が入っています。

Windows10 アップグレード

上記記事の内容だと、Windows 10 アップグレード後に、GRUB2に影響が出て、Windows は起動できるが、Linuxは起動できない状態になるとありましたが、アップグレード後特に問題なく起動出来ました。

注意点としては、Windows 10 アップグレード時に3〜4回ぐらい(忘れました)再起動しますが、その時はGRUB2から Windows を選択してやる必要があるため、基本的にパソコン前に張り付いておく必要があります。

Windows 10 アップグレード後、GRUB2 への影響

何もありません。
何もないので、引き続き GRUB2 には Windows 7と表記されいます。
上記リンク先に、 ubuntu での GRUB2 の表記を Windows 10 に更新する方法が書かれていたので、それをヒントに LMDE2 でもできるかもしれませんが、特に困った事はなかったので私 7 の表記のまま使っています。

私はアップグレード時に、特に問題は起きませんでしたが、
他の環境ではどうなるか分からないので、ファイルはバックアップをしっかりとってから実行して下さい。

2016/02/03

Android 5.0.2 以上でBLEが動かない

Occurrence -事象-

機材とAndroid を BLE (Bluetooth low energy) で繋ごうとしたところ、Android 5.0.2以上の端末で Security Exception が発生した。
5.0.1 や 4.2 などは問題ないが、5.1や6.0で発生する。

エラー内容は以下のようになっている。

java.lang.SecurityException: Need BLUETOOTH_PRIVILEGED permission: Neither user 99999 nor current process has android.permission.BLUETOOTH_PRIVILEGED.

発生箇所は BluetoothGatt#setCharacteristicNotification

Causes -原因-

StackOverflow にほぼ発生事例そのままの報告がある、

Android 5.0.2 onwards don’t allow HID access through Bluetooth LE

さらに、Android Issues に [BLE] Reading/writing char/descr of a HID service throws an exception があり、その中で

“Enforce BLUETOOTH_PRIVILEGED permission for HID-over-GATT”

のメッセージのコミットが原因でHIDに対する GATTのコネクションに BLUETOOTH_PRIVILEGED が要求されるようになったと書かれている。

HID とは ?

HID(Human Interface Device)のことで、
マウスやキーボードなどの入力装置を無線化するためのBluetooth用のプロファイル。
本来上記の通り、マウスキーボードなどに使われるものだが、健康器具などにも使われているケースがある。確かに人が使うものだけど。

BLUETOOTH_PRIVILEGED とは?

Android Developers によれば、

Allows applications to pair bluetooth devices without user interaction, and to allow or disallow phonebook access or message access. This is not available to third party applications.

HIDに関係ありそうなのは、メッセージに対するアクセスかな?
全然HIDと関係なさそうに見える。
ただ一番大事なのは最後のサードパーティアプリはこれを有効に出来ないという一文。
ビルドインアプリを開発するか、OSのビルド署名を貰えるようなアプリ開発の時は問題ないが、普通にアプリを作っている場合は、この権限を有効化する方法はない。

see also AndroidDevelopers::Manifest.permission::BLUETOOTH_PRIVILEGED

Summary -まとめ-

HID を使ってるかの判断

以下のコミットによると、HIDの判断は, Characteristic UUID が
https://android.googlesource.com/platform/packages/apps/Bluetooth/+/02bebee

00002A4A-0000-1000-8000-00805F9B34FB
00002A4B-0000-1000-8000-00805F9B34FB
00002A4C-0000-1000-8000-00805F9B34FB
00002A4D-0000-1000-8000-00805F9B34FB

のいずれかに該当した場合となる。

上記 Characteristic を引数にしてい BluetoothGatt#setCharacteristicNotification をコールすると SecurityException が発生するようになっている。

禁止された Characteristic UUID

Bluetooth Developer portal で Characteristic UUID の区分け確認できる。

Characteristic UUID 内容
00002A4A-0000-1000-8000-00805F9B34FB HID Information
00002A4B-0000-1000-8000-00805F9B34FB Report Map
00002A4C-0000-1000-8000-00805F9B34FB HID Control Point
00002A4D-0000-1000-8000-00805F9B34FB Report

see also Bluetooth Developer portal : Characteristics

なぜ禁止されたのか?

わからない。
結論から言うとわからない。なんらかのバグ修正としてコミットされているが、
どのような背景があるのかはわからなかった。

2016/01/14

LMDE2のNVIDIA Driverを更新する

LMDE2 に NVIDIA のグラフィックドライバを入れます。

Inspect your graphic board

terminalで

lspci -vnn | grep VGA -A 12

Download a driver Installer

NVIDIAの公式サイトからLinux X64用のDriver Installerを手に入れます。
私の場合は以下から
http://www.nvidia.com/download/driverResults.aspx/77525/en-us

NVIDIA-Linux-x86_64-340.32.run というシェルファイルを手に入れました。

Prepare Installation

reboot し grub で recovery mode を選択し、
ログイン画面で、Ctrl + Alt + F1 を押してCUIモードになります。
ユーザーログイン後、

sudo update-initramfs -u

を実行します。
これはNVIDIAシェルがカーネルモジュールを追加するため必要になります。
これが実行されない場合
Nouveau kernel driver を止めてくれとのエラーメッセージが表示されます。

Installation

再度再起動し、recovery modeになり、CUIモードにログインします。
X serviceを止めます。

sudo service mdm stop

インストールを実行します。

sudo sh ~/Downloads/NVIDIA-Linux-x86_64-340.32.run

後は画面の支持に従い、選択していくだけです。
終了後は再度再起動して、ログインしましょう。

2016/01/12

臆病者のための Ansible

Target

Ansible を使ってみてその便利さに驚愕するとともに、他人が作ったPlaybookを引き継ぐ怖さも知る。
全て手順書のように書いていればいいのだが、多数のRoleを使い高度に書かれたAnsible playbookを引き継ぎ、メンテまたは代わりに実行するのはとても怖い。
playbook実行する前に何がどうなるのか確認しまくりたい。

そんな自分のための初心者ガイド

Links

実行の仕方など基礎的な事は公式ドキュメント参照

Hello world
http://docs.ansible.com/ansible/intro_getting_started.html

どうやって使うかのオススメ、ディレクトリ配置など
http://docs.ansible.com/ansible/playbooks_best_practices.html

確認コマンド

playbook は実行前に色々確認したいですよね。

基本

ansible-playbook playbook.yml

これで playbook が実行されます、設定がしっかりしてる環境であれば、外部サーバに実際に変更を行ったり、時には取り返しのつかない変更が実行されたりします。何も考えずに実行するのは危険

確認 hosts

ansible-playbook playbook.yml --list-hosts

playbook は実行されません。
playbookが実行される相手先をリストアップするだけです。
host は hosts ファイルなどで定義された ansible のためのサーバー接続先設定のことです。

制限 hosts

ansible-playbook playbook.yml -l hoge --list-hosts

-l の後に host 名もしくは hostgroup 名を入力すれば playbook の接続先を制限することができます。 --list-hosts と組み合わせると捗ります。

確認 tasks

ansible-playbook playbook.yml --list-task

playbook は実行されません。
各タスクの-name箇所が実行順番通りに列挙されます。
-nameをきちんと書いておけばきっちり確認になります。

私は気になる箇所は 出力内容で grep 検索しています。

確認 最終

ansible-playbook playbook.yml -CD

playbook は実行されません。
-CD-C, --check, -D, --diff の合成です。
二つ同時に実行したほうが効果的です。
playbook は実行されませんが、実際に各 host に接続し、
実際に実行した際のファイル差分(あれば)が表示されます。

playbook の構成によってはエラーになりますが、内容をよく見て本当にエラーか確認してください。
例えば以下手順は playbook が正常であっても、エラーになります。

  1. ansible がファイルAを消す
  2. ansible がファイルAがないことを確認する

実際にはファイルAは消されていないので手順2でエラーになります。

また、さらに詳細に内容がみたい場合は以下実行して下さい

ansible-playbook playbook.yml -CD -vvvv

-v, –verbose verbose mode (-vvv for more, -vvvv to enable
connection debugging)

では良いAnsibleライフを