Docker 0.9.1 on OS X Mavericksを試す

手順とメモ

1. VirtualBoxをインストール

VirtualBox - Downloads から、「VirtualBox X.X.X for OS X hosts」をダウンロード、インストール

2. Homebrewでdockerとboot2dockerをインストール

  $ brew update
  $ brew install docker boot2docker

3. boot2docker init

sysctlコマンドを使うから、/usr/sbinにPATHが通ってないと落ちる。

$DOCKER_HOST変数を設定する。

  $ export PATH=/usr/sbin:$PATH
  $ export DOCKER_HOST=tcp://localhost:4243
  $ boot2docker init
[2014-04-00 00:00:00] Creating VM boot2docker-vm
Virtual machine 'boot2docker-vm' is created and registered.
...
[2014-04-00 00:00:00] Done.
[2014-04-00 00:00:00] You can now type boot2docker up and wait for the VM to start.
  $

4. Docker daemonを起動

boot2docker upか、boot2docker startで起動。

デフォルトだと、User:docker、Password:tcuserだった。

  $ boot2docker up
[2014-04-00 00:00:00] Starting boot2docker-vm...
[2014-04-00 00:00:00] Started.

To connect the docker client to the Docker daemon, please set:
export DOCKER_HOST=tcp://localhost:4243
  $ boot2docker ssh
docker@localhost s password:
                        ##        .
                  ## ## ##       ==
               ## ## ## ##      ===
           /""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
           \______ o          __/
             \    \        __/
              \____\______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
boot2docker: 0.8.0
docker@boot2docker:~$ uname -mnr
boot2docker 3.13.3-tinycore64 x86_64
docker@boot2docker:~$ exit
  $

5. コマンドの実行

base環境を入れて、uname -aしてみる。

  $ docker run base uname -a
$ docker run base
Unable to find image 'base' locally
Pulling repository base
b750fe79269d: Download complete
27cf78414709: Download complete
Linux 4db1b899c036 3.13.3-tinycore64 #1 SMP Wed Mar 26 03:16:13 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
  $

5. Docker daemonの終了

boot2docker downか、boot2docker stopか、boot2docker haltで終了。

  $ boot2docker down
[2014-04-00 00:00:00] Shutting down boot2docker-vm...
  $

6. boot2dockerのアップデート

  $ boot2docker down
  $ boot2docker download
  $ boot2docker up

Homebrew楽ちんだった

「Differences Between PyQt4 and PyQt5」の抄訳

PyQt使ってみたかったけど、ver.4とver.5で違いが結構あるぽいので Differences Between PyQt4 and PyQt5 — PyQt 5.2.1 Reference Guide を抄訳してみた。

なにか変なところがあったら教えてくだちい。


PyQt4とPyQt5の違い

PyQt5とPyQt4は、互換性がありません(が、PyQt4からPyQt5へのアプリケーションの移植は難しいことではないと言えます)。 このセクションでは、PyQt5とPyQt4の間の主要な違いについて説明します。

サポートするPythonのバージョン

Python2.6より古いバージョンはサポートしません。

廃止予定の機能

PyQt5では、deprecatedになった又はQt v5.0で廃止したAPIについてはサポートしません。 しかし、いくつかのAPIをうっかり含んでしまうかもしれません。 それらはバグなので、見つけ次第直していきます。

複数のAPI

PyQt4では複数バージョンのAPIをサポートしています(例えば、QString, QVariantなど )。 PyQt5ではQVariantを除いて、全てのAPIはv2のみが実装しています。 QVariantの変更と、QPyNullVariantについては、 Support for QVariant — PyQt 5.2.1 Reference Guide を参考にしてください。

古いスタイルのシグナルとスロット

PyQt4での古いスタイルのシグナルとスロットはサポートしません。 そのため、次のメソッドPyQt5では実装していません。

  • QObject.connect()
  • QObject.emit()
  • SIGNAL()
  • SLOT()

SIGNAL()SLOT()の返り値を引数としてつかうメソッドは、全てサポートしません。 シグナルか、それぞれ呼ばれるメソッドは常に同等なものとして、違いがなくなります。

加えて、次のメソッドは違いが発生します。

  • disconnect()は、引数を取らず全てのQObjectインスタンスから切断します。

新しいスタイルのシグナルとスロット

Qtは2つの異なる引数を持つシグナルを実装しています、1つは引数を使うもので、もうひとつは引数を使わないものです。 PyQt4では、好きな方を選んで使うことができました。 しかしながら、シグナルを発するときに、あなたは適切な引数を持つシグナルを使う必要がありました。

PyQt5では、全ての引数が指定されたシグナルのみを使うことができます。 しかし、シグナルを発するときに不要な引数は省略することができます。

PyQt4とは違って、PyQt5ではプロパティでの定義をサポートしており、シグナルとスロットはQObjectのサブクラスではなくなりました。

QtDeclarative、QtScript、QtScriptToolsモジュール

PyQt4のQtDeclarativeQtScriptQtScriptToolsモジュールはサポートしません。 PyQt5では、これらはQtQmlQtQuickモジュールに置き換えました。 PyQt4と違って、PyQt5ではQMLからPythonオブジェクトの生成をサポートします。

QtGuiモジュール

PyQt4のQtGuiモジュールは、PyQt5ではQtGuiQtPrintSupportQtWidgetsモジュールに分割しました。

QtOpenGLモジュール

PyQt5では、QGLContextQGLFormatQGLWidgetクラスのみをサポートします。

QtWebkitモジュール

PyQt4のQtWebKitモジュールは、PyQt5ではQtWebKitQtWebKitWidgetsモジュールに分割しました。

QtXmlモジュール

PyQt4のQtXmlモジュールはサポートしません。 QXMLStreamReaderクラスかQXMLStreamWriterクラスか、Pythonの標準XMLモジュールを使ってください。

pyqtconfigモジュール

PyQt4のpyqtconfigモジュールはサポートしません。 この The PyQt5 Extension API — PyQt 5.2.1 Reference Guide で、PyQt5でのサードパーティのパッケージ(例:QScintilla)についてを説明しています。

dbus.mainloop.qtモジュール

PyQt4のdbus.mainloop.qtモジュールは、PyQt5ではdbus.mainloop.pyqt5になりました。 これは、並べて実行することも許可し、どちらも同じ機能になります。

QDataStream

readUInt8()readInt8()writeUInt8()writeInt8()メソッドは、全て数値の読み書きとして解釈されます。 PyQt4では、これらは1つの文字について解釈されていました。

QFileDialog

PyQt4のQFileDialogに属するgetOpenFileNameAndFilter()getOpenFileNamesAndFilter()getSaveFileNameAndFilter()メソッドは、PyQt5ではgetOpenFileName()getOpenFileNames()getSaveFileName()に改名しました。PyQt4のgetOpenFileName()getOpenFileNames()getSaveFileName()はPyQt5ではサポートしません。

QGraphicsItemAnimation

廃止予定だったQGraphicsItemAnimationクラスは削除しました。 もし、移植したいPyQt4アプリケーションで使用していた場合は、QPropertyAnimationをかわりに使うことを検討してみてください。

QMatrix

廃止予定だったQMatrixクラスは削除しました。 もし、移植したいPyQt4アプリケーションで使用していた場合は、QTransformをかわりに使うことを検討してみてください。

QPyTextObject

PyQt4はQPyTextObjectを複数のQtのクラスからサブクラス化されたPythonクラスを定義することができないことの回避策として使用しています。 PyQt5はQ_DECLARE_INTERFACEのようにC+ +で宣言されている、インタフェースがあるものであれば、複数のQtのクラスからサブクラスであるPythonのクラスを定義する機能をサポートしています。 したがってQPyTextObjectはPyQt5に実装されていません。

QSet

PyQt4では、QSetPython v2ではリストとして、Python v3ではセットとして実装していました。 PyQt5では、常にセットとして実装しています。

pyuic5

pyuic5は、pyuic4--pyqt3-wrapperフラグをサポートしません。

pyrcc5

pyrcc5pyrcc4-py2-py3フラグをサポートしません。 pyrcc5の出力は、Python v2.6以降の全てのバージョンに互換性があるものになります。

Cooperative Multi-inheritance

Releasing the GIL

Object Destruction on Exit


時間無くなっちゃった(・ω<)

SECCON2013 全国大会に参加した

(自分はほとんどなにもしてないけど)SECCON2013 東北大会で優勝したため、2014年3月1日〜2日に開催されたSECCON2013 全国大会にも、チームifconfigとして参加してきました。
Write-upを書けるほど活躍できなかったのですが感想などを書いてみます。

会場

東京電機大学の北千住キャンパスが会場でした。
前回の会津は車で片道4時間位かかったのですが、今回はつくばエクスプレス1本で行けたのでかなり楽でした。
ただ、車ではなく電車だったので大きな荷物(冷蔵庫とか)を運ぶのはつらそうです。
東京電機大学千住キャンパスは出来てただったらしく、とても綺麗だし先進的な感じがあるしで、付いた直後はデパートか何かだと思いました。
しかも、北千住駅から徒歩3分位で行けるしで更に素晴らしいと思いました。

競技

前回参加した東北大会と同じように、競技は2日間に渡って開催されました。
土曜日と日曜日での開催だったのですが、幸い春休みだったので特に問題はなかったです。
他のチームには社会人の方もチラホラと見えたのですが、大変そうでした。。。

今回の競技は、問題サーバから正解をを見つけて送信するサブミットポイントと、定期的に更新される自分のチーム固有のハッシュ値を問題サーバのとある場所に書き込むとスコアが足されるフラグポイントの2種類のポイントがありました。
サブミットポイントは前回参加した大会のような感じでしたが、フラグポイントに関しては初めて体験する形式だったので、少し理解するまで時間がかかりました。

問題サーバは合計で6台表示されていたのですが、スタート直後は3台のみオープンされていたのですが、1日目の終盤でもう3台もオープンされました。
サブミットポイントのための問題は殆どわからなかったので早々に諦めて、フラグポイントを回収することに専念しました。

順位

SECCON2013 全国大会 CTF決勝戦 結果発表 の通り、20チーム中5位でした。
点数を見て分かる通り、自分のチームはサブミットポイントが1,300点(20チーム中2位)と良かったのですが、フラグポイントがわずか192点(20チーム中10位;´Д`)のみでした。
自分はサブミットポイントに関しては太刀打ちできそうになかったので、フラグポイントの回収を試みたのですが、あまり獲得できませんでした。。。

最後に

1日目の終盤にKorinサーバのフラグポイントの取得方法をくりすさんから教えてもらったので、2日目はそれに粘着してスコアを稼ごうとしたのですが、某チームにめちゃ妨害されて全然取れなかったことが残念でした。
自分はフラグを書き込むためにワンライナーのコマンドを作っておいたのですが、大会後に話を聞いてみたところ某チームは4種類のシチュエーションに対して対応できるようにスクリプトを色々と用意していたそうです。
完全にやられました。

KorinサーバにSSHでログインした瞬間にコネクションを切断されてしまうので、いろいろ考えて対抗したのですが、長時間は奪えなかったです。
関係無いですが、サマーウォーズの「暗号を解いてログインしようとした瞬間に敵に閉めだされる」シーンとなんかかぶっている感じがあって悔しかったですが楽しかったです。

「SECCON 2013 東北大会」に参加した

11/09-11/10に、会津で開催された「SECCON 2013 東北大会」に参加してきました。
@hktechno さんに誘ってもらって、@x86_64 さんと@KIM_TPDN さんと一緒にチームifconfigでやってました。
http://atnd.org/event/E0019973

種目は、
(1日目)
・セキュリティ・○☓クイズ
フォレンジック・チャレンジ
・Raspberry PI ROPチャレンジ
・4bitマイコン暗号解読
・セキュリティ・パズル
正規表現クロスワードパズル
・車載器ハッカソン
(2日目)
アセンブラかるた対戦
・バイナリかるた対戦
・セキュリティ・早押しクイズ大会
と、様々な分野の問題があって充実していました。

自分は、1日目は「正規表現クロスワードパズル」を解いた他に、「4bitマイコン暗号解読」と「セキュリティ・パズル」のお手伝いをしていました。
2日目は「アセンブラかるた対戦」、「バイナリかるた対戦」、「セキュリティ・早押しクイズ大会」をやってました。

---

1日目

正規表現クロスワードパズル」は、こんな感じ(http://www.regexcrosswords.com/)の14x14マス版でした。
意味が通る回答になるので、なんとなーく端っこから攻めていったら解けました。
最初に解いたボーナスももらえました∩(・ω・)∩

4bitマイコン暗号解読」は、大人の科学アレをごにょごにょしてモールス信号のリスニングをする感じな問題でした。
会場内のそこらじゅうでモールス信号がピピピピ鳴るので気が散ってしまいました。

セキュリティ・パズル」は、16進数な数独でした。
数独を解いたあとに、いくつかの穴に埋まる数字を並べ替えると答えがでるというものです。
solverが落ちてたので、それを使ったらすぐに出ました。

2日目

アセンブラかるた対戦」は、50枚くらいのカードがあって、表面に16進数で機械語、裏面にそれに対応するアセンブラコードが書いてありました。
INC, DEC, POP, PUSH, XCHGらへんは、決まり字が長いため、HLT, INT, INTOのような決まり字が短い札を中心に狙っていったら勝てました。

バイナリかるた対戦」
作者の方のページ(http://kozos.jp/binary-karuta/)を見ていただけるとわかると思いますが、普段からバイナリをぺろぺろしてるような人じゃないと辛い感じでした。。。
ただ、たまにRubyスクリプトC言語ソースコードも含まれているので、明らかにわかる奴を狙っていったら勝てました。

---

セキュリティ系の競技は出たことがなかったのですが、今回の大会はガチガチのセキュリティ問題だけじゃなかったので、全く手が出ない!問題だけじゃなくて良かったです。
本戦までにはもっと戦えるように修行します。

---

おまけ
ちゃんと話を聞かないで、フツーに問題をオープンした結果...
※このあとMacBook Airはネットワークから遮断しOS再インストールしました
∩(´;ヮ;`)∩