Debian StretchのBOXファイルを作成する

Debian Stretchが2017年6月17日にリリースされました。早速BOXファイルを作成してみましょう。

1. Virtual BoxにDebianをインストールする。

Virtual BOXにベースとなるDebian Stretchをインストールします。インストール時に注意することは以下となります。

  • 初期ユーザとして、vagrantユーザを作成する。パスワードは"vagrant"にする。
  • sshdをインストールする

2. 新しく作成した仮想マシンにログイン

新しく作成した仮想マシンにrootユーザでログインします。

3. sudo/curlをインストー

sudo/curlをインストールします。

root@debian:~# apt install sudo curl

4. sudoの設定

vagrantユーザがsudoできるようにします。 まず、visudoコマンドを実行します。

root@debian:~# visudo

以下の行を追加して保存&終了します。

vagrant ALL=(ALL)     NOPASSWD: ALL

4. sshキーのインストー

vagrantユーザのsshキーをインストールします。

一旦ログアウトし、vagrant ユーザでログインし、以下のコマンドを実行します。 やっていることは、vagrantユーザの公開鍵をインストールしています。これをしないと、vagrant仮想マシンにログインして仮想マシンの制御を行えません。

vagrant@debian:~$ mkdir .ssh
vagrant@debian:~$ chmod 0700 ~/.ssh
vagrant@debian:~$ curl -k -L -o ~/.ssh/authorized_keys  https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub
vagrant@debian:~$ chmod 0600 ~/.ssh/authorized_keys

5. VirtualBox の Guest Additions をインストー

VirtualBoxのGuest Addtionsをインストールします。

Virtual BoxのGuest Addtionsをマウント

Virtual Boxで、インストールした現在準備中の仮想マシンウインドウを選択し、「デバイス」メニューから、「Guest Additions CDイメージの挿入」を選択します。こうすると、Guest AddtionsのCDが選択された仮想マシンに挿入されます。

CDのマウント

以下のようにしてVirtual Box Guest AddtionsのCDをマウントします。

root@debian:~#  mount -t iso9660 /dev/cdrom /mnt

Guest Addtionsをセットアップ

以下のコマンドでセットアップします。

root@debian:~# apt-get install build-essential module-assistant dkms
root@debian:~# /mnt/VBoxLinuxAdditions.run

その他セットアップ

以上で必要最小限のセットアップはできました。お好みでboxファイルに含めておきたい追加のセットアップをしておきます。

OSを終了

セットアップが終了したらOSを終了します。

root@debian:~# shutdown -h now

BOXファイルの作成

ホストマシン上でBOXファイルを作成ます。 以下コマンドを実行します。 “Debian-stretch"の部分は、Virtual Boxの仮想マシン名です。

$ vagrant package --base Debian-stretch

作成したBOXファイルを登録

作成したBOXファイルをVagrantが使えるように登録します。

vagrant box add yakubouzu/debian-stretch package.box

追加後、一覧を表すると登録したBOXが表示されるはずです。

$ vagrant box list
yakubouzu/debian-stretch (virtualbox, 0)

試しに起動

作ったBOXファイルを使ってvagrant仮想マシンを作成してみます。

まずは設定ファイルであるVagrantfileの作成をvagrant initコマンドで行います。

$ vagrant init yakubouzu/debian-stretch
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

作成できたら仮想マシンを起動。

$ vagrant up

無事エラーが表示されず起動すればOKです。

「Kotlin」がAndroidの正式な開発言語と言うけれど

「Kotlin」がAndroidの正式な開発言語になったらしいが、なんでKotlinのようなマイナー言語が正式な開発言語になるのか不思議。 確かにJVM上で動くのでJavaと相性がいいとは思うけど、わざわざ開発リソースを当ててサポートする必要がるのだろうか?

世の中、GoだとかScalaだとか、マイナーな言語になんだかんだ理由をつけて採用しているプロジェクトがあるけれど、結局のところ新し物好きなだけなのではないか。 Javaとか、RubyPythonC#でいいんじゃない?言語仕様の習得に苦労するんなら、もっと他にやるべきことあるんでない?と思うオジさんなのでした。

TP-Link AC1900無線LAN子機を購入しました

昔から気になっていた、TP-LinkのAC1900 デュアルバンド PCI-E 無線LAN子機 (Archer T9E)を購入してみました。

何故気になっていたかというと、MacOSX86のサイトtonymacosx86.comのByers Guideで、WiFIアダプターとして掲載されていたからです。 導入してみた結果、追加のドライバーなしでMacOS標準の無線LANとして使用することができ、なかなか良い感じです。 感度も悪くなく、速度も上がりました。 買うかどうか悩んでいたのですが、やはり買ってみて良かったと思ってます。

MySQL Workbenchの不具合が解決!

macOS SierraでMySQL Workbencthを使った時、クエリを実行すると応答が返ってこなくなる不具合があったのですが、最近バグフィックス版の6.3.9がリリースされ、ちゃんと動くようになりました! MySQL Workbanchを多用していた私としては朗報です。 よかった。よかった。 f:id:yakubouzu:20170211102228p:plain

FxPro MetaTrader 5で書いたExpertAdvisorが取引しない

FxProのMetaTrader 5で、MQL5 Wizardで作成したExpertを実行しても、なぜかポジションを全くオープンしません。恐らくOrderSendを行うときにエラーになっていると思われるのですが、エラーメッセージが何も出ないのでお手上げです。

そこで、デバッグ機能を使用して調べてみました。

すると、CTrade::FillingCheckメソッドでFillModeが期待するモードになっていないためfalseを返しており、取引を行っていませんでした。FxProの場合、OrderTypeのFillModeを、ORDER_FILLING_IOCに指定しないとダメなようです。

解決策としては、MQL5のWizerdで作成されたソースのOnInit()関数に以下のコードを加えることにより、取引するようになりました。 取引するときのクラス、CExpertTradeクラスを生成し、FillingTypeをORDER_FILLING_IOCに設定してExtExpertオブジェクトに設定しています。 デフォルトのFillModeは、ORDER_TYPE_FOCのようです。

int OnInit()
  {
//--- Initializing expert
   if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
 
//-- ここから追加      
   CExpertTrade *trade = new CExpertTrade;
   trade.SetTypeFilling(ORDER_FILLING_IOC);
   trade.SetAsyncMode(false);
   ExtExpert.InitTrade(Expert_MagicNumber, trade);
//-- ここまで

//--- Creating signal

FxProのMetaTrader 5はFillModeがちょっと違うようで、巷のMQL 5で書かれたExpertAdvisorがそのままでは動作しないようです。気を付けたほうがよいでしょう。

Ubuntu 16.04のVagrantで使うboxを作成する

1. Ubuntu 16.04 Serverをインストー

基本的には最小構成のインストールを行い、以下の設定に注意してください。

  • ユーザ名はvagrant、passwordもvagrantにする。
  • ソフトウェアの選択でOpenSSH Serverは必ずインストールする。
  • 後はお好きな構成で。

2. モジュールを最新版にする

インストール後起動したら、OSのモジュールを最新版にする為に以下を実行する。

sudo apt update; sudo apt upgrade

終わったらOSを再起動しておく。

3. vagrantユーザがsudoをパスワード無し使えるようにする

visudoコマンドを実行し、sudoグループのユーザがパスワードなしでsudoを実行できるようにします。

sudo visudo

以下の行を編集します。

%sudo   ALL=(ALL:ALL) ALL

以下のようにします。

%sudo   ALL=(ALL:ALL) NOPASSWD:ALL

4. vagrantSSH公開鍵をインストー

vagrantコマンドがOSにログインして処理を行えるように、vagrantユーザ用のssh公開鍵をインストールします。 以下の操作はvagrantユーザで行ってください。

cd
mkdir .ssh
chmod 0700 .ssh
wget https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub
mv vagrant.pub .ssh/authorized_keys
chmod 600 .ssh/authorized_keys

5. sshd設定

/etc/ssh/sshd_configを編集し、「UseDNS no」の設定を追加する。この設定は、sshログイン時に接続元のipをDNSで確認する処理を行わないようにします。この設定を行うことにより、DNSに登録されていないサイトからのsshログインの速度が上がります。

sudo vi /etc/ssh/sshd_config

6. VirtualBox Guest Addtionsをインストー

ローカルホストのディスクにマウント出来るようにするために、VirtualBox Guest Addtionsをインストールします。 Ubuntu Serverの場合は以下コマンドでインストールできます。

sudo apt-get update
sudo apt-get install virtualbox-guest-dkms 

デスクトップ版他、最新のものを入れたいときは以下のようにします。 まずは開発のビルドモジュールをインストール。

 sudo apt-get install linux-headers-$(uname -r) build-essential dkms

次に、仮想マシンのウィンドウをアクティブにして、VirtualBoxのメニューより、Guest AddtionsのCD-ROMをマウントします。 その後、以下を実行。

sudo mount /dev/cdrom /media/cdrom
sudo sh /media/cdrom/VBoxLinuxAdditions.run

不要なファイルの削除

ディスク容量を減らすために、aptでインストールした時にできたキャッシュファイルを削除します。

sudo apt-get autoremove 

不要なカーネルイメージの削除

結構な容量を食うので、不要な古いカーネルイメージも削除します。

以下のコマンドを実行することで、一発で削除できます。

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

確認しながらやりたい場合は、まず、古いLinuxカーネルバージョンを確認します。

ls -l /boot |grep vmlinuz|grep -v `uname -r`
vagrant@ubuntu:/tmp$ ls -l /boot |grep vmlinuz|grep -v `uname -r`
-rw------- 1 root root  7047504  7月 13 10:59 vmlinuz-4.4.0-31-generic

バージョンが分かったら、不要なカーネルイメージを削除します。

sudo apt-get autoremove --purge linux-headers-4.4.0-31-generic
sudo apt-get clean

##シャットダウンします packageにするための設定が完了したのでVMをシャットダウンします。 他にお好みで入れておきたいソフトウェア、設定があれば行っておいてください。

sudo shutdown -h now

### vagrantのパッケージを作成

シャットダウンしたら、VirtualBoxのVirtualマシン名を指定してboxを作成します。 以下の例では、Ubuntu1604が先ほどまで設定していたVirtualBoxのVirtualマシン名となります。

vagrant package --base Ubuntu1604

Vagrantのbox登録

パッケージができたら、boxを登録します。 以下の例では、Ubuntu1604-Serverがbox名となります。

vagrant box add Ubuntu1604-Server package.box 

テスト

Vagrantを使って試しに作成してみて、テストしてみましょう。

vagrant init Ubuntu1604-Server
vagrant up

うまく起動できたらOK!

ブログを開設

ブログを新たに作るのはもう何度目のことか・・・。久しぶりにブログを書いていきたいと思ったので、今度はHatena Blogに新規のブログを開いてみることにしました。

Hatanaの使い勝手はどうかな。まだあまり使っていないのでよくわかりませんが、今後ともよろしくお願いします。