ksaitoの日記

日々試したことの覚え書き

git mergetoolを使ったコンフリクトの解消

gitのmergetoolでemacsのemergeを選択する設定です。

git config --global merge.tool emerge

コンフリクトが発生した場合に、mergetoolを起動するとemacsのemergeが起動します。

git mergetool

abで、どちらの変更を採用するか、pnで前後の変更へ移動、qでマージ完了です。 マージ処理をキャンセルするには、Ctrl-]です。

Ubuntu 16.04のDockerをaufsからdevicemapperに切り替える。

Ubuntu 16.04のDockerをaufsからdevicemapperに切り替えました。 aufsで作成したコンテナは、全て削除されます。

RedHat系のコンテナでswapを追加しようと試みました。 LVMなのでサイズ変更できるかと思いましたが、下記の通りmdsetupがエラーとなりました。 aufsをdevicemapperに変えることで改善するか試しました。(結果改善しませんでした。涙)

$ docker pull oraclelinux:7.2
$ docker run -it --rm oraclelinux bash
[root@a453b4f54f10 /]# dmsetup ls
/dev/mapper/control: open failed: Operation not permitted
Failure to communicate with kernel device-mapper driver.
Check that device-mapper is available in the kernel.
Incompatible libdevmapper (unknown version) and kernel driver (unknown version).
Command failed
[root@a453b4f54f10 /]# 

環境

使った環境は、下記の通りです。

$ grep DESC /etc/lsb-release 
DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"
$ docker --version
Docker version 1.12.1, build 23cf638
$ docker info | grep Storage
Storage Driver: aufs
$ 

変更

/etc/default/dockerにdevicemapperを使うようにオプションを設定します。

dockerサービスを止めてaufsで作成されたコンテナを削除します。

$ sudo systemctl stop docker
$ sudo rm -rf /var/lib/docker
$

Ubuntu 16.04のdockerは、/etc/default/dockerのオプションを読み込まないのでsystemdのお作法に従ってオプションを読み込ませるように変更します。

$ grep devicemapper /etc/default/docker 
DOCKER_OPTS="--storage-driver=devicemapper"
$ sudo cp -p /lib/systemd/system/docker.service /etc/systemd/system
$ egrep "Envi|DOCKER_OPT" /etc/systemd/system/docker.service
EnvironmentFile=/etc/default/docker
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
$ 

systemdの設定を反映してdockerを起動します。

$ sudo systemctl daemon-reload
$ sudo systemctl start docker
$

devicemapperに切り替わりました。

$ docker info | grep Storage
 WARNING: Usage of loopback devices is strongly discouraged for production use. Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
Storage Driver: devicemapper
WARNING: No swap limit support
$ 

結果は変わらず...

$ docker pull oraclelinux:7.2
7.2: Pulling from library/oraclelinux
10ec637c060c: Pull complete
Digest: sha256:583f9e880f9228894555775c720d32eb22bf09cd13009c036d8f19b3257ccb41
Status: Downloaded newer image for oraclelinux:7.2
$ docker run -it --rm oraclelinux bash
Unable to find image 'oraclelinux:latest' locally
latest: Pulling from library/oraclelinux
Digest: sha256:583f9e880f9228894555775c720d32eb22bf09cd13009c036d8f19b3257ccb41
Status: Downloaded newer image for oraclelinux:latest
[root@f7d5ae7a0107 /]# dmsetup ls
/dev/mapper/control: open failed: Operation not permitted
Failure to communicate with kernel device-mapper driver.
Check that device-mapper is available in the kernel.
Incompatible libdevmapper (unknown version) and kernel driver (unknown version).
Command failed
[root@f7d5ae7a0107 /]# 

iPhone7

iPhone6SからiPhone7に引越ししました。 大きな問題はありませんでしたが気が付いたところが幾つかあります。

SIMカード

今回は、USIMカードは同梱されておらず、今使っているものを差し替えるだけでした。iPhone6Sは、SIMなしとなります。

引っ越し

引っ越しは、以下の手順、iCloudのリカバリコードがなかったらピンチでした。

  • iTunesOS Xを最新化(結構時間がかかった)
  • iPhone6sをバックアップ
  • 電源をオフしてSIMを抜く
  • iPhone7にSIMをセット
  • iTunesに接続した状態で起動
  • iTunesでバックアップを復元を選択(復元に30分くらいかかった)
  • iPhone7起動後にiCloudのログインを求められ、二要素認証が必要なったので、以前に作成したリカバリコードを入力

起動した直後は、インストール済みのアプリが更新されるためかiPhone7が非常に熱くなりました。 一晩放置しても熱かったので、一度、再起動しました。

アプリが減った

なぜか、アプリが減りました。 ホーム画面で10個くらいアプリが少なくなっています。

App StoreAppleから放置アプリと認識されたアプリたちは引き継がれないのかもしれません。 フリーの辞書アプリとか重宝していたものが使えなくなりました。 有償で購入したものもなくなっているような...

Google関連のアプリは再ログイン

GoogleカレンダーとInboxは、再ログインが必要でした。

Googleカレンダーは、常に横で認識される。

こんな感じ、アップデートを待つしかないかな。 f:id:ksaito11:20160917161704p:plain

ケースは買い替え

Apple純正のレザーケースを使っていました。ほとんど形状は、変わらないのにカメラのレンズが若干大きくなっているため使えず買い替えとなります。

認証アプリは再設定が必要

AuthenticatorやAuthyは、再設定が必要でした。 iPhone6Sでログインしてから、各サービスでの無効化、iPhone7を認識させる流れになります。 利用しているサービスによっては、リカバリの手段がサポートへの問い合わせしかないものもあるので注意が必要です。

LINEは、再認証の手続きが必要

再認証の手続きは、指定したメールへの認証送信+携帯のSMSへのメッセージ送信なので、旧機種なくても出来ました。

以上

ubuntu 16.04のtimezone設定

今までは、下記でtimezoneが設定できました。

# echo "Asia/Tokyo" > /etc/timezone
# dpkg-reconfigure --frontend noninteractive tzdata

Ubuntu 16.04では、このやり方は出来ませんでした。

# grep "VERSION=" /etc/os-release 
VERSION="16.04.1 LTS (Xenial Xerus)"
# cat /etc/timezone; file /etc/localtime 
Etc/UTC
/etc/localtime: symbolic link to /usr/share/zoneinfo/Etc/UTC
# echo "Asia/Tokyo" > /etc/timezone
# cat /etc/timezone; file /etc/localtime 
Asia/Tokyo
/etc/localtime: symbolic link to /usr/share/zoneinfo/Etc/UTC
# dpkg-reconfigure --frontend noninteractive tzdata

Current default time zone: 'Etc/UTC'
Local time is now:      Sun Sep  4 13:55:59 UTC 2016.
Universal Time is now:  Sun Sep  4 13:55:59 UTC 2016.

# cat /etc/timezone; file /etc/localtime 
Etc/UTC
/etc/localtime: symbolic link to /usr/share/zoneinfo/Etc/UTC
# 

以前は、/etc/timezoneに従って/etc/localtimeを返納してくれましたが/etc/localtimeの内容で/etc/timezoneが書き換えられてしまっているようです。 とりあえず、dpkg-reconfigure tzdataで手動で選択するしかないか...

timedatectlコマンドというので操作する見たいです。

# timedatectl set-timezone `timedatectl list-timezones | grep Tokyo`
# timedatectl 
      Local time: Sun 2016-09-04 23:11:36 JST
  Universal time: Sun 2016-09-04 14:11:36 UTC
        RTC time: Fri 2016-08-12 04:15:46
       Time zone: Asia/Tokyo (JST, +0900)
 Network time on: yes
NTP synchronized: no
 RTC in local TZ: no
#

zabbixのカスタムLLD

ドキュメントに作り方が書いてあります 。

カスタムLLDで必要なJSONファイルを作成する汎用の処理をpythonで作成します。

シェルで取得した下記の形式のファイルを入力にします。

{#NAME1} {#NAME2}   
name11 name12
name21 name22

ファイルからJSON形式に変換します。

>>> [json.dumps(l) for l in csv.DictReader(open('data.txt'), delimiter=' ')]
['{"{#NAME2}": "name12", "{#NAME1}": "name11"}', '{"{#NAME2}": "name22", "{#NAME1}": "name21"}']
>>> 

カスタムLLDの辞書形式にします。

>>> { 'data': r }
{'data': ['{"{#NAME2}": "name12", "{#NAME1}": "name11"}', '{"{#NAME2}": "name22", "{#NAME1}": "name21"}']}
>>> 

2行で書けるpython素晴らしい!

Selenium2をpythonで使う

Selenium2をpythonで使ってみました。

テストシナリオの作成

FirefoxSelenium IDEを使って操作をキャプチャします。 yahooで"test"を検索して画像検索に切替えるというシンプルな操作をキャプチャします。

f:id:ksaito11:20160724204351p:plain

エクスポートでpythonを出力します。

f:id:ksaito11:20160724204528p:plain

こんな感じでpythonのunittestのソースが出力されます。

PS C:\Users\Administrator\Documents\python> head sele.py
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re

class Sele(unittest.TestCase):
PS C:\Users\Administrator\Documents\python>

テストケースの実行

出力されたファイルを実行するとfirefoxが起動してシナリオを実行します。

PS C:\Users\Administrator\Documents\python> python sele.py
.
----------------------------------------------------------------------
Ran 1 test in 12.437s

OK
PS C:\Users\Administrator\Documents\python> 

インタプリタでの実行

インタプリタで実行します。

TestSuiteにして、2回実行してみます。

PS C:\Users\Administrator\Documents\python>> python
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 20:40:30) [MSC v.1500 64 bit (AMD64)] on wi
Type "help", "copyright", "credits" or "license" for more information.
>>> import unittest
>>> import sele
>>> suite = unittest.TestLoader().loadTestsFromTestCase(sele.Sele)
>>> s2 = unittest.TestSuite([suite,suite])
>>> unittest.TextTestRunner(verbosity=1).run(s2)
..
----------------------------------------------------------------------
Ran 2 tests in 30.282s

OK
<unittest.runner.TextTestResult run=2 errors=0 failures=0>
>>>

awsのWindowsインストールメディア

なかなかたどり着けないawsWindowsインストールメディアのリンクです。 使用するリージョンによってスナップショットのIDが異なります。

Configuring Windows Components on Amazon EC2 : Articles & Tutorials : Amazon Web Services