‘Mac’ タグのアーカイブ

murave

Macの移行で復元してみたらOSが巻き戻った!けど残念…って話

開発環境に Macbook Pro の15インチを使用しつづけて結構な年月が経ちました。

(壊れたりで)数回ハードの変更はありましたが、OSを更新すると各プロジェクトの環境調整が必要になるということもあり、Mojave でOSの更新を止めてました。ハードが Big Sur 非対応ってのもありましたが。

このまま Intel Mac が滅びるまで添い遂げるつもりだったのですが、タッチパッドが死んでしまいハードを変更することになりました。なってしまいました。

Apple Sillicon なマシンで開発全てがどうにかなってる未来が来る前に!
そんな未来は来ない可能性も高いですけども(Windows も絡んでるんでなぁ)

愚痴でした。本題に入ります。

新しいマシンを用意していただいたのですが、今の時代OSは Big Sur になってます。正直「Intel Mac 使ってる間は Mojave でいいけどなぁ」というお気持ち。

そんな中 TimeMachine のバックアップからデータ移行する方針で情報を集めていたらこんな情報にブチ当たりました。

データ移行について教えてください
(https://discussionsjapan.apple.com/thread/250758270)

最終的にこのケースは、「移行」ではなく、「復元」をするように指示があり、やってみたところ無事に新しいMacの方にデータを移すことができました。アップルのどのページにも、新しいマックにデータを移す際に、「復元」するということは書いていなかったと思いますので、どういうことなのか僕にはよくわかりませんが、同じような問題に直面している方がいらっしゃいましたら、参考になさってください。
えっ、復元したって、新マックはhigh sierraになったのですか? はい、どういうわけかそうなりました。そんなやり方はどこにも書いてないと思います。

「な、なんだってー!?」(やり取りの一部を抜粋してます)

新しいバージョンのOSが入ってる Mac に旧バージョンな TimeMachine バックアップを復元すると旧バージョンに戻るってこと?

せっかくだからダメ元で試してみました。
Big Sur が入ってる Mac で Mojave な TimeMache から復元してみる。

復元の手順で処理始まった! 完了後に確認してみると

マジ Mojave やん。 しかし

Mojave も APFS には対応していると思うのですが。

検索してみたところこんな記事がありました。

https://applech2.com/archives/20200701-macos-11-big-sur-beta-apfs-container-issues.html

ちょうど携わっていたプロジェクトが終わって余裕ができたタイミングだったので、深くは追わずに覚悟をきめて Big Sur にバージョンを上げることにしました。

まぁ、面白いものが見れた。

それから数日、WWDC後のぼく

今環境構築してるMacbook ProさんがMontereyの対象外だった件
— murave (@murave) June 7, 2021
murave

Mac からのリモートデスクトップ接続で日本語キーボード使う

muraveです。仕事では日本語キーボードな Mac を使ってます。

Windows Server でがんばる系のお仕事がきそうなのでクラウド上に実験環境を作ろうと思いました。

EC2 で Windows Server インスタンスをたてる

とりあえず実験なのでAWSの無料枠からはじめましょうかね。

Amazon EC2 で Windows Server 2016 を実行

AWSで日本語版Windowsサーバーを構築する方法。初心者でもわかる!

ということでこれらのサイトを参考にさせていただき EC2 でインスタンスたてました。

順調。

リモートデスクトップで接続する

Windows インスタンスへの接続

を見ながら Microsoft Remote Desktop での接続を行いました。

このページについては接続に必要な情報の取得についてめんどうなことが長々と書くのやめて「接続ボタンをクリックせよ。そこに全部書いてある」にかえるといいと思いました。

リモートデスクトップ(RDP)接続できたので、おもむろにメモ帳などを立ち上げ、日本語入力はどうかねぇなどと試してみます。

うわ、USキーボードになってる。 「つらい」

Windows 10 / Windows Server 2016 環境でキーボード レイアウトが英語キーボードとして認識してしまった際の対処方法

を参考にさせていただいて、「英語キーボード(101/120キー)」から「日本語キーボード(106/109キー)」変更。

変化なし。Microsoft Remote Desktop 側かな?

そして決定版なページ発見! ありがてぇ

Mac からのRDP 接続で日本語キーボードを設定する

Microsoft Remote Desktop はやめて Parallels Client を使うのが良い模様。

しかし、Parallels Client でつなぎ直してもすぐには解決せず。

ごちゃごちゃと色々な事を試していましが、ふと「どこかで設定がキャッシュされてたり?」と思い Windows Server と Mac の両方をリブート、つなぎ直したら日本語キーボードが認識されました!

Mac 側について「ことえり」じゃなきゃだめといった情報もありましたが、私の環境だと「Google 日本語入力」でも大丈夫な感じです(様子見中)

余談1

Wireshark でパケットをながめてみたりもしましたがRDPのパケット、わからなかったです。

余談2

最近また「Web系でMac多いのなんで?」みたいな話をみたのですが、私の場合は

  • macOSは(ライセンス的に)Macでしか動かせないがWindowsはVMなどでどうにかなる
  • iPhone関係の開発のため
  • WindowsよりはWeb関係の開発環境を整えるのが楽(たぶん)

って感じです。

Windows 関係の開発もするので Windows 側が改善されてきたら戻りたい気持ちもありますが、今のところは仕事は Mac かなぁといった感じ。家では、Windows 使ってることが多いんですけどね。Macbook もありますけどほぼ iTunes 専用。

murave

Docker for Mac の使用されていないデータボリュームを削除

murave@ファイルの権限絡みで -v オプションの事を調べていたら今日という日が終わりそう、です。

やりたいことは別にあったんですが、せっかく調べたのでメモを残しておきます。今回、結論は最後に書くので経緯とか読みたくない方は最後まで飛ばして下さい。

データボリュームっていうのは例えば、

$ docker run -v コンテナ上のディレクトリ名 busybox
$ docker volume create --name test-volume
などとすると、

$ docker volume ls
DRIVER VOLUME NAME
local 17e11ebb9fc56e18d99b175d77b0c37b90da561bff07d601279ab7bfc0b0f414
local test-volume
と言った感じでデータボリュームがホスト上に出来ます。
ランダム文字列な名前のほうは前記docker runのように名前未指定な場合によろしくやってくれてるわけです。問題なのが、コンテナを削除しても基本的にこれが残るってこと。

「開発用RDBをゲットだぜ」シリーズの調査中

$ docker rm -f $(docker ps -aq)
でバンバン動作しているコンテナを含めて全部削除しまくっていたのですが、datastoreのデータボリュームが残りまくっているってわけです。

消さねばならぬ。

Macの何処につくられているのだろう?と調べていたのですが、Docker for MacもVMベースで動作しているわけでして、

~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
の中にDockerイメージ共々はいってるんだと思います。こいつ、どんどん膨らみます。

VM上の状況は

$ docker run --rm -it -v /:/vm-root alpine ls -l /vm-root/var/lib/docker/volumes
total 220
drwxr-xr-x 3 root root 4096 Aug 15 08:16 0f2fee8ea1b621774905898b5fb22b79478251f0e6d3901dde5698e9430cfc0f
drwxr-xr-x 3 root root 4096 Aug 16 07:58 15bc83ca3604af4ca66713e3388dd879722ceca30ffcdc3fc05763d75b3dd077
drwxr-xr-x 3 root root 4096 Aug 26 07:23 17e11ebb9fc56e18d99b175d77b0c37b90da561bff07d601279ab7bfc0b0f414
drwxr-xr-x 3 root root 4096 Aug 23 02:08 18e959a82fa5e40f1d02facba9924d6f06f18aa2c2da2c6e07dd3a1c7e429f3a
drwxr-xr-x 3 root root 4096 Aug 16 08:38 261353597aeb63143e38b51306cba073835251795614fa7d3a43ee49008d5756
drwxr-xr-x 3 root root 4096 Aug 16 08:01 3326a3b193cc8e6bce214fd3c33fcc4f10c1317e92959e70c3752d3df83eb771
drwxr-xr-x 3 root root 4096 Aug 16 06:58 33844fb90eb4326f978bc35caf2cb244d5a66d211b4164fcb5130be2a7453c63
drwxr-xr-x 3 root root 4096 Aug 15 08:31 3adc5ccfbd90b059ce8a9fe55034411d0b49d97d18cd00147a11dcc49d7cef3b
drwxr-xr-x 3 root root 4096 Aug 16 05:20 42754f3ef91f7460cb31295de09d203a1c25097051b70451f356fde334efea0a
drwxr-xr-x 3 root root 4096 Aug 16 08:42 4b90ee03c48f0a328ba261cb9174dd62f9f167d544b73576db5171270d17b262
drwxr-xr-x 3 root root 4096 Aug 16 02:23 4e755fcf6804123343e9b40a681dbe5fc9de280cd526497d0afcf89cec963534
drwxr-xr-x 3 root root 4096 Aug 22 08:46 5ce13286a385bd714468174491c9f65bbb9e05e8bdfc4628d89a85b437344351
drwxr-xr-x 3 root root 4096 Aug 16 06:23 63a9fca8324a2e462901a6a92ebbdf08a82fbe50268771353c0017a9ef799f45
drwxr-xr-x 3 root root 4096 Aug 16 06:57 76e7e31984beea2b91d340e91fa20011c69b4922e0c2f22be1c290d75e45b82d
drwxr-xr-x 3 root root 4096 Aug 16 07:46 834badee4c6ae6290f6879779e33885772b962131f85496aaabd43809d6cec62
drwxr-xr-x 3 root root 4096 Aug 9 07:32 8805aaef35fe82403bfb0939cfbb3b66100f051b3bd5f52412e14a28bcb95342
drwxr-xr-x 3 root root 4096 Aug 16 09:02 96b0b5ca5c624d03c310db3e9952d1211cc7123e72aa193eb3d4515286b83c64
drwxr-xr-x 3 root root 4096 Aug 15 09:08 9c09d5123d36a349273a8b3213273317c75b7ba205316e0d6bb1b4596f5a5f01
drwxr-xr-x 3 root root 4096 Aug 16 08:28 9dc0d5b59060261c19a6db265010f975ec90597cf8a80a7a02d629917b7aa143
drwxr-xr-x 3 root root 4096 Aug 9 07:32 a00d1be583a3f80f156f5a77b98cad6687dce8772e345c7b5065e895ba46f110
drwxr-xr-x 3 root root 4096 Aug 16 07:36 a013c0992864236cbf872e33edd7063394111d7d64ce261a0bd49f3533f93612
drwxr-xr-x 3 root root 4096 Aug 15 04:40 a68f07ad252ceb73f842767ed3f2fd1a9628e0ec4b64516d8fd5371a63e1b22e
drwxr-xr-x 3 root root 4096 Aug 10 06:45 ab798f01923ecd36eaf5f92d627a16391c77f036cd9ff45ddad2f7fde6534b03
drwxr-xr-x 3 root root 4096 Aug 16 07:22 ad28856ce3de53103b2c20c7c9f32c616f1e806913c5f37d0c45984443bde92d
drwxr-xr-x 3 root root 4096 Aug 16 07:08 b381a395adf5d6237ba57ca70c8b1c7edd8834b113c204472be25e15ac44d84f
drwxr-xr-x 3 root root 4096 Aug 16 06:20 b5c2eaa2958e6679d9efbcbf915e6018314aeb90641c50368b2728c41efffc4b
drwxr-xr-x 3 root root 4096 Aug 16 09:26 ba6da465e33ee52ff58187a3104624693a5485d1d6084b6a0972a29a92a1210b
drwxr-xr-x 3 root root 4096 Aug 16 07:27 ce72509bdb23ac0791c71b4736c1e92a0d0175e5cc443616639ee8691bfe6613
drwxr-xr-x 3 root root 4096 Aug 23 02:08 d5237bdcc608de3ca3c8a513df47676330844043503dc436e8e6a8a05bb31873
drwxr-xr-x 3 root root 4096 Aug 16 08:55 d548a17a651bef16453793d79c2ff06b20d650039a68627b6736e27002bbaf0d
drwxr-xr-x 3 root root 4096 Aug 15 08:58 d56545b413bb10139f76ecee271a2477be0fe1ca92e1657ec7f57a73e6ae8806
drwxr-xr-x 3 root root 4096 Aug 16 07:14 d6230f991ce389726121d7e03fdf25b8f9bf72764cce7c93998cabca213551d9
drwxr-xr-x 3 root root 4096 Aug 15 09:09 dcd3700e965b5a6b9707e68584106820cbab895d7da99c046af9e6d36ebfd81b
drwxr-xr-x 3 root root 4096 Aug 16 07:30 e0130a6762542f69b670112cf2033f2816546293b4d5ed3189d7b89fb78ff676
drwxr-xr-x 3 root root 4096 Aug 16 08:54 e042396da246d4700a0db47a511d4f0e3214f646e2df2c034bf7056a1fc20f5c
drwxr-xr-x 3 root root 4096 Aug 10 06:52 e316debbe91c31402271ec50af58c975d6af1e345177426708c95ece630da53c
drwxr-xr-x 3 root root 4096 Aug 22 08:49 e8ed864afc8da5110fb3041182c9c26b0bb497293b0df666783d9ad1ba292854
drwxr-xr-x 3 root root 4096 Aug 15 04:54 f5d083892023106f0e17fae041da3d133c2b2ce7f334db24e285f41b1033f425
drwxr-xr-x 3 root root 4096 Aug 16 07:34 f703c284137660273a40e94bf6f2eb3f4ae0305113d8e513774be4da7a857862
drwxr-xr-x 3 root root 4096 Aug 15 08:58 initdb
-rw------- 1 root root 65536 Aug 26 07:23 metadata.db
てな感じで確認できますが、こんなことを調べても動作理解以上の意味はないのでした。

なぜなら

$ docker volume ls
で必要な情報は取得できるからです。

さらに docker volume ls の -q オプションでボリューム名のみ、-f オプションのdangling=true指定でコンテナから参照されていないもの(danglingは宙ぶらりんなという意味らしい)を取得できるので大変便利。

ということで以下のコマンドを実行すると使用されていないデータボリュームが削除されます。

$ docker volume rm $(docker volume ls -q -f dangling=true)
参考
No space left on device error – Docker for Mac – Docker Forums
volume ls — Docker-docs-ja 1.12.RC ドキュメント

murave

Docker公式イメージで開発用RDBをゲットだぜ(MariaDB、Percona Server編)

まえがき

Docker公式イメージで開発用RDBをゲットだぜ(PostgreSQL編)
Docker公式イメージで開発用RDBをゲットだぜ(MySQL編)

に続き予定どおりMariaDB編をお送りします。一言で済むので結論を書くと

「公式イメージのページを読み比べたらMySQLと同じでした。ありがとうございます」

という内容です。ついでに

Docker Hub で Official縛りでMySQLを検索したらPerconaも出てきたので思い出したりした。定期的にPercona良さそうだなぁと思って名前を忘れるを繰り返す存在。
— murave (@murave) 2016年8月16日

というわけでPercona Serverの公式イメージのページも見てみたらこれもMySQLの場合と同じ扱いでしたので含めてみましたよ。

Docker for Macを使用しております。

MySQL派生RDBMS達の公式イメージ

まえがきに引用したTwitterのつぶやきにあるようにDocker HubでOfficial縛りでMySQLを検索しました。

Docker HubでOfficial縛りでMySQLを検索

この様に3件引っかかります。

MariaDBとPercona ServerはMySQL派生のRDBMSです。概要をつかみやすいかと思うページへのリンクをあげておきますね。

MariaDB – Wikipedia
MySQL 互換のDB、Percona Server を使う理由 – Qiita

個人的に、これからはMySQLよりMariaDBを使うことが多くなりそうに感じておりますし、以前からPercona Serverは良さそうだと思っていました(そして忘れる)。

これらの公式イメージのページを読み比べた所、設定用の環境変数の名称も含めてMySQLと同じで、扱いかたはほぼ同じと考えて良いのではないかと思います。

というわけで、調査はすっとばしてMySQL用に作成したファイルをベースにイメージの日本語化とDocker Composeでの起動をしてみようと思います。

基本的に変更点だけ書いていきますのでベースについては前回MySQLの記事をご参照ください。

MariaDB

OFFICIAL REPOSITORY mariadb

2016年8月中旬現在の対応バージョン。

10.1(10.1.16), 10.0 (10.0.26), 5.5(5.5.51)

デフォルトで選択されるlatestは10.1系。今回は10.1系で進めます。

日本語化されたイメージの作成

default localeを設定するDockerfileを作ります。

Dockerfile

FROM mariadb:10.1

MAINTAINER murave

RUN apt-get update && apt-get install locales -y && localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
ENV LANG ja_JP.utf8
日本語化されたイメージ、mariadb_jp:10.1を作ります。

$ docker build -t mariadb_jp:10.1 ./
確認

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mariadb_jp 10.1 3fa6fd548f5b 11 seconds ago 420.8 MB
mariadb 10.1 9a0138c02438 3 weeks ago 391.6 MB
参考に元の公式イメージも載せましたが、サイズが結構でかいですね。

Docker Compose で起動する

docker-compose.ymlを調整。ポートフォワードは23306に設定しました。

docker-compose.yml

datastore:
image: busybox
volumes:
- /var/lib/mysql
container_name: mariadb-datastore

mariadb:
image: mariadb_jp:10.1
environment:
MYSQL_ROOT_PASSWORD: mysecretpassword
MYSQL_USER: foo
MYSQL_PASSWORD: foopassword
MYSQL_DATABASE: foodb
volumes:
- ./conf.d/:/etc/mysql/conf.d
- ./initdb/:/docker-entrypoint-initdb.d
ports:
- "23306:3306"
volumes_from:
- datastore
container_name: mariadb-db
起動します。

$ docker-compose up -d
Creating mariadb-datastore
Creating mariadb-db
起動状態の確認。

$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad95de15a67a mariadb_jp:10.1 "docker-entrypoint.sh" About a minute ago Up About a minute 0.0.0.0:23306->3306/tcp mariadb-db
3515029a71b5 busybox "sh" About a minute ago Exited (0) About a minute ago mariadb-datastore
Sequel Pro を使いポートフォワードした23306にユーザーfooでfoodbデータベースに接続して初期化スクリプトが動作していることを確認できました。

クライアントコンテナでの接続用に作成したclientスクリプトを調整。

client

docker run -it --link mariadb-db:mysql --rm mariadb_jp:10.1 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
接続して動作確認します。

$ ./client
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 10.1.16-MariaDB-1~jessie mariadb.org binary distribution

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| foodb |
| information_schema |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]> select Host, User from mysql.user;
+------+------+
| Host | User |
+------+------+
| % | foo |
| % | root |
+------+------+
2 rows in set (0.00 sec)

MariaDB [(none)]> USE foodb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [foodb]> SHOW TABLES;
+-----------------+
| Tables_in_foodb |
+-----------------+
| users |
+-----------------+
1 row in set (0.00 sec)

MariaDB [foodb]> SELECT * from users;
+------+--------+
| id | name |
+------+--------+
| 1 | first |
| 1 | second |
+------+--------+
2 rows in set (0.00 sec)

MariaDB [foodb]> exit
Bye
Percona ServerOFFICIAL REPOSITORY percona

2016年8月中旬現在の対応バージョン。

5.7(5.7.13), 5.6 (5.6.32), 5.5 (5.5.51)

MariaDBと違ってMySQL準拠ですね。latestは5.7系。今回は5.7系で進めます。

日本語化されたイメージの作成

default localeを設定するDockerfileを作ります。

Dockerfile

FROM percona:5.7

MAINTAINER murave

RUN apt-get update && apt-get install locales -y && localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
ENV LANG ja_JP.utf8
日本語化されたイメージ、percona_jp:5.7を作ります。

$ docker build -t percona_jp:5.7 ./
確認

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
percona_jp 5.7 22e3746fb304 8 minutes ago 367.2 MB
percona 5.7 ed3fc6a159be 3 weeks ago 338.2 MB
こちらも参考に元の公式イメージも載せました。

Docker Compose で起動する

docker-compose.ymlを調整。ポートフォワードは33306に設定しました。

docker-compose.yml

datastore:
image: busybox
volumes:
- /var/lib/mysql
container_name: percona-datastore

percona:
image: percona_jp:5.7
environment:
MYSQL_ROOT_PASSWORD: mysecretpassword
MYSQL_USER: foo
MYSQL_PASSWORD: foopassword
MYSQL_DATABASE: foodb
volumes:
- ./conf.d/:/etc/mysql/conf.d
- ./initdb/:/docker-entrypoint-initdb.d
ports:
- "33306:3306"
volumes_from:
- datastore
container_name: percona-db
起動します。

$ docker-compose up -d
Creating percona-datastore
Creating percona-db
起動状態の確認。

$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b39630e2fd38 percona_jp:5.7 "docker-entrypoint.sh" 35 seconds ago Up 33 seconds 0.0.0.0:33306->3306/tcp percona-db
ea4c9a0a21b5 busybox "sh" 35 seconds ago Exited (0) 34 seconds ago percona-datastore
Sequel Pro を使いポートフォワードした33306にユーザーfooでfoodbデータベースに接続して初期化スクリプトが動作していることを確認できました。

クライアントコンテナでの接続用に作成したclientスクリプトを調整。

client

docker run -it --link percona-db:mysql --rm percona_jp:5.7 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
接続して動作確認します。

$ ./client
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.13-6 Percona Server (GPL), Release '6', Revision 'e3d58bb'

Copyright (c) 2009-2016 Percona LLC and/or its affiliates
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| foodb |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)

mysql> select Host, User from mysql.user;
+------+------+
| Host | User |
+------+------+
| % | foo |
| % | root |
+------+------+
2 rows in set (0.00 sec)
せっかくのPercona Serverなのでレスポンスタイム分布の取得をやってみましょう。

Response Time Distribution

を参考にPluginを導入して有効化します。

mysql> INSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT SONAME 'query_response_time.so';
Query OK, 0 rows affected (0.03 sec)

mysql> INSTALL PLUGIN QUERY_RESPONSE_TIME SONAME 'query_response_time.so';
Query OK, 0 rows affected (0.03 sec)

mysql> INSTALL PLUGIN QUERY_RESPONSE_TIME_READ SONAME 'query_response_time.so';
Query OK, 0 rows affected (0.03 sec)

mysql> INSTALL PLUGIN QUERY_RESPONSE_TIME_WRITE SONAME 'query_response_time.so';
Query OK, 0 rows affected (0.02 sec)

mysql> SHOW PLUGINS;
+-----------------------------+----------+--------------------+------------------------+---------+
| Name | Status | Type | Library | License |
+-----------------------------+----------+--------------------+------------------------+---------+
(長いので省略しました)
| QUERY_RESPONSE_TIME_AUDIT | ACTIVE | AUDIT | query_response_time.so | GPL |
| QUERY_RESPONSE_TIME | ACTIVE | INFORMATION SCHEMA | query_response_time.so | GPL |
| QUERY_RESPONSE_TIME_READ | ACTIVE | INFORMATION SCHEMA | query_response_time.so | GPL |
| QUERY_RESPONSE_TIME_WRITE | ACTIVE | INFORMATION SCHEMA | query_response_time.so | GPL |
+-----------------------------+----------+--------------------+------------------------+---------+
52 rows in set (0.00 sec)

mysql> SET GLOBAL query_response_time_stats = on;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * from INFORMATION_SCHEMA.QUERY_RESPONSE_TIME;
+----------------+-------+----------------+
| TIME | COUNT | TOTAL |
+----------------+-------+----------------+
| 0.000001 | 0 | 0.000000 |
| 0.000010 | 0 | 0.000000 |
| 0.000100 | 0 | 0.000000 |
| 0.001000 | 1 | 0.000271 |
| 0.010000 | 0 | 0.000000 |
| 0.100000 | 0 | 0.000000 |
| 1.000000 | 0 | 0.000000 |
| 10.000000 | 0 | 0.000000 |
| 100.000000 | 0 | 0.000000 |
| 1000.000000 | 0 | 0.000000 |
| 10000.000000 | 0 | 0.000000 |
| 100000.000000 | 0 | 0.000000 |
| 1000000.000000 | 0 | 0.000000 |
| TOO LONG | 0 | TOO LONG |
+----------------+-------+----------------+
14 rows in set (0.01 sec)
おー。取れた取れた。

初期投入データのサンプルについてsecondのidを1にしているという恥ずかしい状況に気づいたのでSequel Proで編集、ついでに3:thirdを追加してから再度レスポンスタイム分布を取得してみます。

mysql> SELECT * from INFORMATION_SCHEMA.QUERY_RESPONSE_TIME;
+----------------+-------+----------------+
| TIME | COUNT | TOTAL |
+----------------+-------+----------------+
| 0.000001 | 0 | 0.000000 |
| 0.000010 | 8 | 0.000057 |
| 0.000100 | 3 | 0.000173 |
| 0.001000 | 9 | 0.001866 |
| 0.010000 | 0 | 0.000000 |
| 0.100000 | 2 | 0.058591 |
| 1.000000 | 0 | 0.000000 |
| 10.000000 | 0 | 0.000000 |
| 100.000000 | 0 | 0.000000 |
| 1000.000000 | 0 | 0.000000 |
| 10000.000000 | 0 | 0.000000 |
| 100000.000000 | 0 | 0.000000 |
| 1000000.000000 | 0 | 0.000000 |
| TOO LONG | 0 | TOO LONG |
+----------------+-------+----------------+
14 rows in set (0.00 sec)
発行されたSequel Proから発行されたクエリ文増えました。スロークエリはないですね(あたりまえ)。

気軽に試せて良いですね。
以上、「Docker公式イメージで開発用RDBをゲットだぜ」でした。

murave

Docker for Mac のDockerホストに入るには

どうしたらいいんだろう?

と方法を探していたら以下のページにscreenコマンドでttyに接続すれば良いとの情報がありました。

Docker for Mac プライベートベータを早速使ってみた! – paiza開発日誌

試してみます。

$ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
この後、Enterすると表示が出て、moby login: にrootを入力してEnterでDockerホストに入ることができました。

Docker for Macホストへの接続

添付の画像は私の場合の表示ですが、screenの設定がカスタマイズされているのでおそらく他の方とは異なります。

screen常用者の端末ではカスタマイズされていて他の人には使えないのも常ですので操作方法については別途調べるなどしてください(Ctrl-a ?でヘルプをみることができますがそもそもCtrl-aが変更されていることが多く、例にもれず私もCtrl-zにしてあります)。

私は導入していないのですがtmuxなどでも良いでしょう。たぶん。tmuxについては下記、shunの記事などをどうぞ。

OS X に byobu で tmux 環境をお手軽構築 [2015 冬版]

絶対忘れるのでメモでした。

murave

Mac上に開発用Roundcubeをセットアップ

プラグインを作りたいので開発環境を手元に作ることにしました。

インストールについては弊社kosugiが書いた

Roundcubeをインストール&設定してみました

を参考に作業しました。あまり問題は出なかったのですが、Roundcubeのバージョンがあがり設定ファイルの名称や扱いが変わったりしていたのでメモを残したいと思います。

あとはphpのビルトインサーバー(php -S)で手軽にやりたいな〜ってのと、Gmailのセキュリティ強化の影響、個人的趣味でデータベースがPostgreSQLだというのが異なる点です。

・PHPは以前の記事でPostgreSQL用のモジュールを入れた5.5.14。
 - phpenv で入れた PHP に pdo_pgsql をインストール
 - phpenv で入れた PHP に pdo_pgsql をインストール
・PostgreSQLのバージョンは9.3.5.0 (Postgres.app)
・メールサーバーはGmail利用する。
・Roundcube 1.0.2 (Complete)

■ データベース(PostgreSQL)準備
ダウンロードして展開したRoundcubeのディレクトリにあるINSTALLファイルを参照しながら準備します。
・pgAdmin3などでroundcubeユーザーを作ります。開発環境なので権限はザックリSUPERUSERにしときました。
・roundcubemailデータベースを作ります。

CREATE DATABASE roundcubemail
WITH OWNER = roundcube
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'ja_JP.UTF-8'
LC_CTYPE = 'ja_JP.UTF-8'
CONNECTION LIMIT = -1;

・準備用のSQLを実行。

#展開したRoundcubeのディレクトリで
$ psql -U roundcube -f SQL/postgres.initial.sql roundcubemail

■ ビルトインサーバー起動

#展開したRoundcubeのディレクトリで
$ php -S localhost:8000
PHP 5.5.14 Development Server started at Mon Sep 22 17:13:54 2014
Listening on http://localhost:8000
Document root is /Users/murave/roundcubemail-1.0.2
Press Ctrl-C to quit.

■ installerにアクセスして初期設定
今回だと http://localhost:8000/installer/ にアクセス。画面にしたがって設定していけばOKです。英語ですけど。

STEP2のCreate configで作成される設定ファイルの名称と扱いが以前とは変わっているようです。
config/config.inc.phpが直接作成されます。今回は編集する必要も特にありませんでした。一部(‘des_key)を*で伏せて引用します。

Roundcube_Webmail_Installer

STEP3. Test configのキャプチャです。

■ Gmailについて
kosugiが書いている通りIMAP経由でのメール受信を有効にしておくのは大前提ですが、RoundcubeからGmailにIMAPでアクセスしようとすると「安全性の低いアプリ」として拒否されるかもしれません(拒否されなければ気にする必要はありません)。

この場合「Google アカウント: ログイン試行をブロックしました」というメールが来ていると思います。

このメールに書いてあるのですが、以下のページから設定を変更することができます。あまり良くないのですが今回は「安全性に低いアプリのアクセス」を有効にしてIMAP接続を確認しました。

https://www.google.com/settings/security/lesssecureapps

■ ログインして動作確認
http://localhost:8000/

にアクセス、ログインしてメールの送受信を確認して完了です。

murave

VMware Fusion が入っている Mac での 仮想ディスク(vmdk)縮小

放置していたら仮想マシンが肥大してディスクを超圧迫していました、夏。

そして、ディスクの残容量0と言われた立秋。

Vagrant で使用している Virtual Box の VM がいつの間にか60GBを超えており放置できなくなりました。

検索したところ Virtual Box のツールで .vmdk なファイルを .vdi に変換して縮小する素敵な記事が見つかりました。

Bureimono stdio.h: Vagrant とストレージ容量

でも考えたら、ボクのマシンには VMware Fusion が入っています。vmdkファイルを直接縮小できるよね、たぶん。前にやった気もするし。

ということで、調べて作業した際のメモです。 VMware Fusion は 5.0.5 です。

ゲストOSでゼロクリアを行います(root権限で作業)。

# dd if=/dev/zero of=zero bs=4k
# sync
# rm zero

vmdkファイルの縮小(defragment -> shrink)

$ /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -d target.vmdk
$ /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -k target.vmdk

60GB位あったvmdkファイルが10GB位になりました。

今回はディスクの残容量が少なくなりすぎていて vmware-vdiskmanager を動かすのに苦労しました。そんな状況になる前に対処するようにしないとですね。

yoshida

MacでPPTP(VPN)接続しつつ、通常の接続も行えるようにする方法

Mac OS X 10.5でPPTP接続する方法

MacでPPTP使ってVPN接続するようになって、いろいろと面倒だったことが解決して良かった。
と思っていたのですが、PPTPの方の優先度を上げないといけない場合は、通常の接続が駄目になってしまうようです。
VPN側にインターネットへの制限が掛かっていたりしたら、残念なことになります。
ローカルなネットワークにPPTPに繋ぎながら、それ以外は通常の経路で通信ということで下記にて解決しました。

方法としては、PPTPの優先度は通常のインターネット接続より下げておいて、特定のネットワークアクセスの場合のみPPTPインターフェースを使うようにしてあげればいいようです。VPNを接続した後、ターミナルで下記コマンドを実行すればOK。

sudo route -nv add -net 192.168.13 -interface ppp0

ただ毎回ターミナル上げるのは面倒臭いです。 ちょっと調べると、PPTPが開始するときに実行されるスクリプト(参考)があるじゃないですか。ということで

sudo vi /etc/ppp/ip-up

#!/bin/sh

if [ "$1" = "ppp0" ]; then
/sbin/route -nv add -net 192.168.13 -interface ppp0
/sbin/route -nv add -net 192.168.15 -interface ppp0
fi

のような感じで、route add するスクリプトを書きました。

sudo chmod Cheap Adobe Photoshop CS5 744 /etc/ppp/ip-up

するのをお忘れなく。

もっと楽、シンプルな方法があったら教えてください。

murave

Mac で複数ファイルの一括置換ってどうしてます?

Windows だと Devas ってソフトでバッチリだったんですが、Mac ではいいソフトを見つけることができずにいます。

サブディレクトリ内のファイルも含めてまとめて置換は、今はターミナルで次の手順でやってます。

まず、find で特定拡張子のファイルリストをとって xargs で grep にわたして置換したい単語を検索。

$ find . -name '*.拡張子' | xargs grep 置換したい単語

で、grepに -l オプションつけて置換したい単語が含まれるファイルリストをとって xargs で  perl にわたして置換。

$ find . -name '*.拡張子' | xargs grep -l 置換したい単語 | xargs perl -p -i.bak -e 's/置換したい単語/置換後の単語/g'

perl の -i オプションに .bak と付けてるので元ファイルは bak という拡張子で残ります。
「perlだけでやればいいじゃん」と言われそうですが、いきなりやるのは不安なのと置換が行われてないファイルまで全てタイムスタンプが変わったりしたのでこの方法に落ち着きました。

で、置換されたファイルの内容確認して問題なければbakファイル削除。

$ find . -name '*.bak'

で確認して、

$ find . -name '*.bak' | xargs rm

完了〜。 xargs ラヴ♡

Unix系なら他でも使えると思います。

いいっちゃいいんですが、記憶力がないので思い出せる気がしません。historyがあふれるとオレ終了って感じ(なのでメモという意味もあり)。

ちなみに私がターミナルで一番使うコマンドはブッチギリで

$ history | grep コマンド名

history ラヴ♡♡