Blog

  • Windows Subsystem for Linux のインストール

    Windows Subsystem for Linux のインストール

    Windows 10 の Fall Creator Update から正式に提供されるとこととなった Windows Subsystem for Linux(WSL) では、Linux のバイナリが Windows 上でそのまま動作する。今までは仮想環境や MSYS を使っていたが、仮想環境はリソースを大幅に消費し、MSYS は互換性に問題が出ることがあった。

    今回は Windows 10 の WSL 有効化し、Ubuntu をインストールするまでを説明する。

    wsl-install-01 タスクバーの吹き出しマークからアクションセンターを開き「すべての設定」を開きます。Windows ボタンを右クリックして「設定」を選んでも同じものが開きます。

    wsl-install-02 「アプリ」を開きます。

    wsl-install-03 「関連設定」の「プログラムと機能」を開きます。ウィンドウの幅が十分にあるときは右側に、狭い場合は並んでいるアプリの下に表示されています。

    wsl-install-04 「Windows の機能の有効化または無効化」を開きます。

    wsl-install-05 「Windows Subsystem for Linux」にチェックを入れて「OK」します。

    wsl-install-06 しばし待ちます。

    wsl-install-07 完了したら再起動を求められるので、再起動します。

    wsl-install-08 再起動したら「Microsoft Store」を開きます。

    wsl-install-09 wsl-install-10 検索欄に「WSL」または「Linux」と入力すると「Windows で Linux を実行する」が現れるはずなので、選びます。

    wsl-install-10 今回は Ubuntu をインストールしてみます。「Ubuntu」を開いてください。

    wsl-install-11 「入手」を押します。

    wsl-install-12  ※この手順は表示されたときだけ実行してください
    以前にログインしたことがあるとこの画面が表示されますが、その場合は次の手順で一度 Microsoft Store のデータを消してください。

    wsl-install-13 「すべての設定」 → 「アプリ」 →  「アプリと機能」 → 「Microsoft Store」 →  「詳細オプション」 → 「リセット」

    wsl-install-14  サインインしてない場合はサインインするか「必要ありません」を選びます。今回は他に使わないので「必要ありません」を選びます。

    wsl-install-15 しばらく待ちます。

    wsl-install-16 完了しました。

    wsl-install-17 初回起動時に 5 分ほど待たされたあと、ユーザ名とパスワードの設定を求められるので入力して設定してください。

    WSL 環境の Ubuntu は %USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_(英数字)\LocalState\rootfs に展開されています。この配下を直接操作するのは非推奨ですが、一時的に Linux と Windows とのファイルの移動を行いたいときには使えます。

     

  • Ryzen 7 1700 で BitZeny マイニング

    母艦の CPU を Core i5 3570K から Ryzen 7 1700 にしたので、BitZeny のマイニングについて。結論を先に書くと SMT
    On (Intel でいうところの Hyper-Threading Technology) であれば、定格あるいはオーバークロック状態なら 12 スレッドが最も高ハッシュレートになりました。

    消費電力とワットパフォーマンスを考えて、現在は 1.55GHz に落として運用しています。すると今度は、スレッド数が多い方がハッシュレート高くなり、16 スレッドでマイニングしたときが最も効率よく掘れました。ただ、相性なのか負荷なのか原因がわからなかったど、16 スレッドでマイニングしているとビデオドライバが頻繁に落ちてしまい、復帰するまでしばらく GPU マイニングが止ってしまう。これでは具合が悪いので、結局今は 14 スレッドで常用しています。

    1.55GHz なのは、ASRock AB350H Pro4 の A-Tuning にある Silent Mode に設定したときになるというだけで、特に深い理由はありません。もしかしたらもっとワットパフォーマンスが出る周波数があるかもしれないけど、ボタン一発のお気楽設定ができるので、現状はこれで運用しています。

    消費電力の測定には ELPA 簡易電力計エコキーパー EC-05EB を使用しています。

    測定条件

    マザーボード
    ASRock AB350M Pro4
    CPU
    AMD Ryzen 7 1700
    CPU クーラー
    Wraith SPIRE(with RGB LED)(Ryzen 付属の純正)
    RAM
    UMAX DDR4-2400 4GBx2
    ビデオカード
    MSI GeForce GTX 1070 Ti GAMING 8G
    OS
    Windows 10 Pro
    minerd
    nezumi_tech さんのソースから Debian で自家コンパイルした単一バイナリのもの

    1.55GHz 0.875V

    アイドル時は裏で ccminer が動いている状態なので、厳密なアイドル状態ではありません。また、ハッシュレートはある程度連続して出る最高値としました。

    条件ハッシュレート [khash/s]消費電力 [W]
    アイドル180
    -t 82.77198
    -t 103.04201
    -t 123.34203
    -t 143.52204
    -t 163.77204

    3.2GHz 1.13125V

    条件ハッシュレート [khash/s]消費電力 [W]
    -t 106.2255
    -t 126.4258
    -t 146.12258

    まとめ

    • クロックを落としているときは 16 スレッドをフルに使った方がハッシュレートが出る
    • ただし 16 スレッドで回すと GPU ドライバが死ぬ(原因不明)
    • 定格だと先駆者の検証通り 12 スレッドが最もハッシュレートが高くなる
    • スレッド数と消費電力に有意な差は認められない

    この記事を書いている間に新しい minerd が出て、CPU Affinity を設定できるようになったので、そちらも検証してみたいですね。

  • Debian でコンソール画面の解像度を変更する

    普段サーバには Debian を使っていて、よほどの理由がない限り GUI は無効にしています。VirtualBox 環境でも初期解像度(640×480?)だと狭すぎるので、変更の仕方を書き記します。

    # /etc/default/grub
    # コメントアウトを外して好みの解像度に
    GRUB_GFXMODE=800x600
    # こちらは追記
    GRUB_GFXPAYLOAD_LINUX=keep
    # update-grub2
    # reboot

    参考

  • BitZeny のマイナーを Win 環境向けにビルドする

    Linux 環境上で Windows 向け minerd.exe をクロスコンパイルするお話。64bit 版 Windows 向けです。 DLL を一緒にコピーするのが手間なので、static link にして単一バイナリで minerd.exe を生成します。

    マイニング環境の CPU に合わせて最適化するため、Windows 上で VirtualBox を使って Ubuntu 17.10 の仮想環境を構築して行います。今回 Debian ではなくて Ubuntu なのは何となくの気まぐれです。普段は Linux では CUI 環境しか使わないのですが、結果的に GUI 環境があったおかげでバイナリの Windows 環境への移動が少し楽でした。

    参考文献

    下準備

    $ sudo apt-get update
    $ sudo apt-get upgrade

    ビルド環境の準備

    $ sudo apt-get install build-essential automake mingw-w64-x86-64-dev g++-mingw-w64-x86-64
    $ sudo apt-get install git

    ソースの取得とビルド

    $ git clone https://github.com/nezumi-tech/cpuminer
    $ cd ./cpuminer/deps/
    $ sh ./build_win_deps.sh
    ..............
    .....<略>.....
    ..............
    $ cd ..
    $ autoreconf -fi -I./deps/x86_64-w64-mingw32/share/aclocal
    $ ./configure --host=x86_64-w64-mingw32 CFLAGS="-Ofast -march=native -flto -funroll-loops -fomit-frame-pointer" -I./deps/x86_64-w64-mingw32/include -std=c99 -DWIN32 -DCURL_STATICLIB -DPTW32_STATIC_LIB" --with-libcurl=deps/x86_64-w64-mingw32 LDFLAGS="-L./deps/x86_64-w64-mingw32/lib -static"
    $ make

    もし途中でこけたら

    コンパイルオプションをいじったりすると途中でビルドがこけることがある。とりあえず一回、make clean; make し直してみる。それでだめなら考える。

    $ make clean
    $ make

    以上の手順で minerd.exe が生成されているはずなので、Windows 環境にコピーするなり移動するなりして使います。

    ベンチマーク

    BitZeny 公式 Windows 64bit 11/10版 SSE4.1

    minerd.exe -a yescrypt --benchmark
    
    

    nezumi_tech さんの改良版

    minerd.exe -a yescrypt --benchmark
    
    

     

     

  • Excel で IFS を使わず条件分岐(値の範囲)

    範囲の開始値範囲の終了値判定
    059D
    6069C
    7079B
    8089A
    90100S

    上の表のような条件によって判定を行うとき、プログラムだと単に if, else if でできまますが(美しさはともかく)、Excel だとどうするか? 何も考えずに行うとしたら IF の入れ子で行うことになると思いますが、正直見難いのでもっと綺麗に処理したい。

    Excel 2016 からは IFS 関数が実装されて複雑な条件分岐が書きやすくなったが、Excel 2013 以前では IFS 関数は使えません。Excel 2013 以前で数値の範囲で条件分岐を行う方法の一つを記します。

    (さらに…)

  • さくら VPS の Aipo 用 Let’s Encrypt SSL 証明書の更新

    Let’s Encrypt の証明書期限が近づいてきたので更新を行います。

    HTTPS(TCP 443) が Web サーバ等で使われていると、そのまま更新をかけても次のようなエラーが表示されます。

    Attempting to renew cert (xxxxx.example.com) from /etc/letsencrypt/renewal/xxxxx.example.com.conf produced an unexpected error: Problem binding to port 443: Could not bind to IPv4 or IPv6.. Skipping.
    All renewal attempts failed. The following certs could not be renewed:
     /etc/letsencrypt/live/xxxxx.example.com/fullchain.pem (failure)

    なのでまず HTTPS を使っている Aipo のサーバを停止させます。停止させる前にデータのバックアップも取っておきます。

    # /usr/local/aipo/bin/backup.sh
    # /usr/local/aipo/bin/shutdown.sh

    初期設定時のまま特に変更することもないので、renew するだけです。Tomcat 用に Keystore 形式への変換まで行います。

    # certbot renew
    .....
    .....
    .....
    # cd /etc/letsencrypt/live/aipo.example.com/
    # openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out ssl.p12
    Enter Export Password: *****
    Verifying - Enter Export Password: *****
    # /usr/local/aipo/jre/bin/keytool -importkeystore -destkeystore tomcat.keystore -srckeystore ssl.p12 -srcstoretype PKCS12
    Enter destination keystore password: #####
    Re-enter new password: #####
    Enter source keystore password: *****
    Entry for alias 1 successfully imported.
    Import command completed: 1 entries successfully imported, 0 entries failed orcancelled

    後は Aipo を起動しなおすだけ。

    # /usr/local/aipo/bin/startup.sh

    これで終りですが、Aipo は起動してポートも開いているのに Web ブラウザからアクセスできず、かなり焦りました。とりあえず 10~15 分ほど放置したら元通りアクセスできました。

    起動処理に時間がかかっているだけみたいですが、表面上は起動が完了しているように見えるので気付かないと厄介です。初期導入時にこれに気づかずに何回も再インストールしてしまい、無駄な労力をかなり使いました。

    追記(2017-01-19)

    証明書の期限切れが表示されたと問い合わせがあり、確認したら証明書の日付が更新されていなかった。結局初回と同じ手順でやっと更新されました。

    更新(2018-03-31)

    Aipo 起動スクリプトのパスが誤っていたのを修正(“/usr/local/aipo/startup.sh” -> “/usr/local/aipo/bin/startup.sh”)