vzの尺なblog

〜まだ 1 epoch 目〜

Ubuntuでgoogle drive をマウントする

google drive をマウントする

Ubuntu標準でgoogleドライブをマウントする機能(設定⇛オンラインアカウント⇛googleの「ファイル」を「ON」する)があるが遅過ぎてダメなので以下を使う。
GitHub - astrada/google-drive-ocamlfuse: FUSE filesystem over Google Drive

#インストール
$ sudo add-apt-repository ppa:alessandro-strada/ppa
$ sudo apt-get update
$ sudo apt-get install google-drive-ocamlfuse

#マウント
$ mkdir ~/gdrive
$ google-drive-ocamlfuse ~/gdrive
 〜ここでブラウザでoauth認証して暫く待つ〜
Access token retrieved correctly.

#マウントできたか確認
$ ls -l ~/gdrive

環境

Ubuntu18.04LTS

テキスト選択でポップアップ翻訳する 〜 GoldenDict 〜

目的

  • 英語テキストをマウスで選択すると翻訳結果がポップアップされるようにする
  • 英語⇛日本語の単語翻訳。
  • 環境はUbuntu18.04

f:id:vz-shark:20190824115129p:plain

GoldenDict(辞書ソフト)について

http://goldendict.org/

手順

GoldenDictインストール

sudo apt -y update
sudo apt -y install goldendict

wikidict(英語)の設定

ローカル辞書の用意

stardictの辞書ファイルがそのまま使えるようです。 「 (stardict or goldendict) and 辞書 」等で検索、もしくは以下からDL。

インストールは

sudo tar jxvf stardict-jmdict-ja-en-2.4.2.tar.bz2 -C /usr/share/stardict/dic/
sudo tar jxvf stardict-jmdict-en-ja-2.4.2.tar.bz2 -C /usr/share/stardict/dic/

設定

以下の設定画面で好みにする。

  • メニューバー ⇛ 編集 ⇛ 環境設定 ⇛ インターフェース
  • メニューバー ⇛ 編集 ⇛ 環境設定 ⇛ スキャンポップアップ

システムトレイにいれておくのが使いやすい。また「すべて選択されたキーが押されているときだけポップアップ」を設定しないと頻繁にポップアップされて目障り・・・

アプリ再起動

閉じるボタンではトレイに格納されるだけなので
メニューバー ⇛ ファイル ⇛ 終了 してから再起動。

思った事

  • google翻訳で文単位で翻訳ができない・・・
  • Macは以下の組み合わせがすごくいい!



ー以上ー

『postfix』 外部smtpサーバ(gmail)経由でメール送信する

動機

①運用しているWebサーバからメール送信したい ⇛ ②自前でsmtpサーバを立てる ⇛ ③gmail宛にメール送信すると、お前のsmtpサーバは信用ならないから中継しないと断れれる ⇛ ④困った ⇛ ⑤gmailアカウントでsmtp認証してそこからメール送信する。

※最近はセキュリティーが厳しく③のようにはじかれたりする。以下は関係してそうなwiki
Sender Policy Framework - Wikipedia

環境

普段DockerベースでWebサーバを運用しており、ベースイメージがDebian(Stretch)を使っているので、今回はこれがターゲットです。

Debian + postfix

Debian(Stretch) 9.6
Postfix 3.1.8-0+deb9u1

Dockerイメージ

使ったのは、php:7.1.24-apache-stretch です。元イメージは、debian:stretch-slim です。

gmailの設定

gmailアカウントでは、デフォルト設定だと OAth2認証のみ有効になっているようです。他の認証方式だとエラーになります。 gmailアカウントでログイン⇒ログインとセキュリティ⇒アカウントにアクセスできるアプリ⇒安全性の低いアプリの許可 を「有効」にする。 https://myaccount.google.com/security

f:id:vz-shark:20181210222049p:plain
安全性の低いアプリの許可を有効にする図

上記を許可しないと以下のようなmailログを吐いてエラーになりました。また使ったgmailアカウント宛に、「ログインをブロックしました」とメールが飛んできました。

Dec 10 12:58:45 e08929302e84 postfix/smtp[1743]: 1A08426107E: to=<your@gmail.com>, relay=smtp.gmail.com[108.177.97.108]:587, delay=2.4, delays=0.02/0.01/2.3/0, dsn=4.7.14, status=deferred (SASL authentication failed; server smtp.gmail.com[108.177.97.108] said: 534-5.7.14 <https://accounts.google.com/signin/continue?sarp=
~(中略)~
 Please log in via?534-5.7.14 your web browser and then try again.?534-5.7.14  Learn more at?534 5.7.14  https://support.google.com/mail/answer/78754 h19sm14266437pfn.114 - gsmtp)

sasl2

sasl2のインストール

apt install libsasl2-2 sasl2-bin libsasl2-modules

sasl2がインストールされていないと、mailログに

warning: SASL authentication failure: No worthy mechs found

と表示されてエラーになる。

postfix

postfixインストール

インストール途中で、設定を聞かれますが、後で設定ファイルを編集するので、ここでは「1の設定なし」を選択。

$ apt update -y
$ apt install -y postfix
Postfix Configuration
---------------------

Please select the mail server configuration type that best meets your needs.

 No configuration:
  Should be chosen to leave the current configuration unchanged.
 Internet site:
  Mail is sent and received directly using SMTP.
 Internet with smarthost:
  Mail is received directly using SMTP or by running a utility such
  as fetchmail. Outgoing mail is sent using a smarthost.
 Satellite system:
  All mail is sent to another machine, called a 'smarthost', for delivery.
 Local only:
  The only delivered mail is the mail for local users. There is no network.

  1. No configuration  2. Internet Site  3. Internet with smarthost  4. Satellite system  5. Local only
General type of mail configuration:  1 <リターン>

postfix設定ファイル

postfixの設定ファイル/etc/postfix/main.cfを編集。cp main.cf.prot main.cfで雛形をコピーして使います。いろいろ書いてあるけど、修正したのは以下の箇所

#自分の環境に合わせて書き換え
myhostname = host.mydomain
mydomain = mydomain
myorigin = $mydomain
 
#パス等の指定
sendmail_path = /usr/sbin/postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop

#つかわないのでコメントアウト化
#html_directory =
#manpage_directory =
#sample_directory =
#readme_directory =

#relayとsaslの設定追記
# smtp server relay with sasl_auth
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_tls_security_level = encrypt
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt

アカウント情報の設定

main.cfのsmtp_sasl_password_mapsに指定したファイルにアカウント情報を記述します。
経由するsmtpサーバ アカウント:パスワード
と記述します。

/etc/postfix/sasl_passwdを編集

$ touch /etc/postfix/sasl_passwd
$ chmod 600 /etc/postfix/sasl_passwd
$ vi /etc/postfix/sasl_passwd
smtp.gmail.com your_account@gmail.com:your_password

アカウント情報をハッシュ

$ postmap /etc/postfix/sasl_passwd

postfix再起動

$ /etc/init.d/postfix reload

テスト

mailコマンドとログ確認用のrsyslogの準備

このdockerイメージには、mailコマンドが入っていないので、mailutilsパッケージをインストールします。 また、syslogも入ってないので、インストールしてmailログが出れるよしておきます。

$ apt install -y mailutils rsyslog
$ /etc/init.d/rsyslog start

mail送信テスト

$ mail hogehoge@fugafuga.com
CC:
Subject: test mail sub
honnbunn1
honnbunn2
<CTL-D>

これでメールが届けばOK。
うまく送信できたら以下のようなログがでる・・・

to=<hoge@fuga.com>, relay=smtp.gmail.com[108.177.97.109]:587, delay=2.2, delays=0.01/0.01/1.1/1, dsn=2.0.0, status=sent (250 2.0.0 OK  - gsmtp)

うまくいかないときのログ強化

main.cfに以下を指定するとmail.logにデバック用の詳細な情報がでるのでこれで原因を確認。

debug_peer_list = smtp.gmail.com

Let's Encrypt! 〜無料でSSL化〜

背景

運用しているWebサーバを無料で、独自/常時SSL化する。
よくWordPress等のCMSが使えるマネージド型レンタルサーバを借りていれば無料でSSL化するサービスが提供されていますが、自分が借りているのは格安高性能クラウドのVultrです。SSLも自前で導入する必要があります。

Let's Encrypt!

云わずと知れた、無料で使えるSSL認証局 (Certification Authority (CA) )です。 日本語ポータルもあるのが助かりますね・・・ letsencrypt.jp

環境

普段DockerベースでWebサーバを運用しており、ベースイメージがDebian(Stretch)+Apache2を使っているので、今回はこれがターゲットです。
※いつもはUbuntuユーザーなのです。DebianでもUbuntuでも手順はあまりかわらないはず。aptつかえるし・・・

Debian + Apache2 + certbot

Dockerイメージ

使ったのは、php:7.1.24-apache-stretch です。元イメージは、debian:stretch-slim です。

certbotで証明書発行してApacheに登録

インストール

$ apt install -y certbot

$ certbot --version
certbot 0.10.2

certbotで証明書発行

  • certonly で証明書発行のみ
  • --webrootオプション
    certbotは、webサーバーを内包していて、内容しているwebサーバを使って証明書を発行する時は、standaloneモード。使わない場合(ApacheやNginxを使う時)はwebrootモードを使用する。
  • -d でドメインを指定する
    -d example.com -d test.example.comのように複数指定できる。最初に記述したドメインがコモンネームになる。
  • -w でドキュメントルートを指定
    ドメインごとに別のドキュメントルートディレクトリを指定したいときには、-dオプションの直前に-wオプションを書く。 
  • --rsa-key-size 4096 で鍵長4096bitに指定
  • -m で連絡用メアドを指定。(期限切アラート等が送られてくる)
certbot certonly --agree-tos --webroot --rsa-key-size 4096 -w /var/www/html -d www.hogehoge.com -m webmaster@hogehoge.com 

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for www.hogehoge.com
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges
Generating key (4096 bits): /etc/letsencrypt/keys/0000_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0000_csr-certbot.pem

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/www.hogehoge.com/fullchain.pem. Your cert will
   expire on 2019-02-25. To obtain a new or tweaked version of this
   certificate in the future, simply run certbot again. To
   non-interactively renew *all* of your certificates, run "certbot
   renew"
 - If you lose your account credentials, you can recover through
   e-mails sent to webmaster@hogehoge.com.
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

/etc/letsencrypt/live/www.hogehoge.com/ 以下に鍵ファイルが生成されている。これらをWebサーバに設定する。

Apache設定

SSL設定ファイルは/etc/apache2/sites-available/default-ssl.conf これを編集する。
必要なのは以下の設定。

ServerName www.hogehoge.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/www.hogehoge.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.hogehoge.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/www.hogehoge.com/chain.pem

Apacheに設定反映させてリロードする。

$ a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
  service apache2 restart

$ a2enmod ssl
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Enabling module socache_shmcb.
Enabling module ssl.
See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
  service apache2 restart

$  a2ensite default-ssl.conf
Enabling site default-ssl.
To activate the new configuration, you need to run:
  service apache2 reload

$ service apache2 reload
[ ok ] Reloading Apache httpd web server: apache2.

テスト

Webブラウザhttps://www.hogehoge.com/にアクセスしてつながるか確認。ブラウザの鍵マークが表示されればOK。  
また、以下のサイトでSSL証明書のテストができるのでこれで確認する。サイトにホスト名を入力して実行する。 https://www.ssllabs.com/ssltest/

ちなみに、B判定でした。なんでだろ・・・。今日は時間ないので、あとでA判定目指そう・・・

f:id:vz-shark:20181127152533p:plain
SSLテスト結果の図

常時SSL化

せっかくSSL対応したので、httpをhttpsにリダイレクトして常時SSL化にします。 /etc/apache2/apache2.conf を編集します。今回は / 以下すべて対象。

<Directory />
〜中略〜
    #### forword http -> https ----add start
    <IfModule mod_rewrite.c>
          RewriteEngine On
          LogLevel alert rewrite:trace3
          RewriteCond %{HTTPS} off
          RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    </IfModule>
    #### forword http -> https ----add end
〜中略〜
</Directory>

これで、ブラウザでアクセスして、http://www.hogehoge.com/https://www.hogehoge.com/ にリダイレクトされればOK。

SSL証明書自動更新

Let's Encrypt!では、証明書が90日間の期限で、期限切れの30日前から更新できます。わすれないようにcronに登録しておきます。

certbotで更新

  • certbot renewですべての証明書が更新される。
  • --post-hook "command"
    で、renew後に、commandが実行される。renewは更新期限が迫らないうちは実行がスキップされる。その場合はpost-hookも実行されない。以下のように、apache2にリロードする等の使い道。
  • --force-renew
    更新期間外でも強制的に更新できるが、何回もやると弾かれるらしい・・・。動作確認時や鍵長変更など期限をまたずに更新したい時だけ使うようにする。
certbot renew --post-hook "service apache2 reload"

cron に登録

3ヶ月期限で、1ヶ月前から更新できるので、2ヶ月に1度の実行でよいはず。だが、ここでは、念のため1周間に1度実行するように設定する。

自作GPUマシン完成(フェーズ1)

『手元にGPUマシンを』~シリーズ第5回~

やっとGPUを買いました。最終的にGTX1080tiにしました。10月中旬に買ってとりあえずGPUマシンは完成していたのですがなにかと時間がなく、ブログにも少し飽きてたのでほったらかし状態でした。やっとモチベーション戻ってきたので再開したいとおもいます。


前回までのあらすじと本シリーズについて

vz-shark.hatenablog.com


迷ったあげくPalitの1080tiに

RTX2080tiですがMSIのGaming X Trioがコアクロックも高めで静寂でよく冷えると評判が良いので狙っていたのですが、10月中旬の時点で在庫が劇薄でなかなか手に入りそうではありませんでした。現在でも品薄です・・・。2080tiの値段を考えると1080tiの2倍ぐらいするので、普通にFP32演算ベースだとコスパが悪すぎます。そうなると2080tiの魅力は、①FP16演算、②TensorCore(4x4テンソルのFP16演算)、③NVLINK SLI(見かけ上複数のGPUが1つのGPUとして振舞う)といった感じでしょうか・・・。左記①②はどちらかというと推論向きです。もともとNVIDIAはグラフィックのAI強化目的(推論)でTensorCoreを載せてるので当たり前といえば当たり前です。③はで2枚構成で35万円ぐらいになってしまいます。またパフォーマンス的に未知なので人柱感が強いです(それでも11GBx2枚で、22GBのGPUカーネルコードを実行できるのは魅力的・・・)。
以上を考慮して、1080tiを買うことにしました。1080tiは一時期のマイニングブームのころより大分値段が落ち着いていますし在庫も豊富です。口コミも多いので参考にさせてもらい、定評があったPalitの「GTX 1080ti Super Jet Strem 風」を買いました。このグラボはドスパラPalitのコラボモデルで、ドスパラで8.4万円ぐらいで買えます。ヤフオクでもUsed品探してみましたが落札相場が6.4万円ぐらいでした。グラボは使用環境(オーバークロックなど)で寿命が短くなる等聞いたこともあり保証なしの中古品で2万差なので新品を購入しました。


取り付つ

ハイエンドグラボは初めてかったのですが、大きさにビックリしました。これでも2連ファンで控えめなほうです。ちなみに、MSI 2080ti Gaming X Trioは3連ファンでこのPalitよりさらに大きく330mmもあります。 MSIはケースに収まるかな・・・と、そんなことを思いつつ取り付けました。流用したSilverStoneのPCIeケーブル(PCIe補助電源ケーブルを流用してみた - vz-sharkのブログ)もバッチリで問題なく動きました。

f:id:vz-shark:20181111201318p:plain
Palit1080ti風が青く光っているの図


ベンチマーク&消費電力確認

  • Win10のNiceHash
    NiceHashでマイニングすると、333ワット、アルゴリズムX16Rで18.885M H/s。。
    GTX700ti(2GB)で、137ワット、2.146M H/sだったのでほぼ想定通りの結果。

f:id:vz-shark:20181111200357p:plain
1080tiでNiceHashの図


これまでにかかった費用(パーツ第のみ計上)

~<今回購入分詳細> ~

~<シリーズ通した全体>~

  • 第1回分 : 0円
  • 第2回分 : 70,000円
  • 第3回分 : 4,415円
  • 第4回分 : 991円
  • 第5階分 : 83,980円
  • 合計   : 159,386円


最後に

とりあえず完成です。これをフェーズ1として、しばらく運用します。あとは、2080tiの情報や相場などを見つつ臨機応変にをグレードアップなどしていこうと思います。これが自作のだいごみですね。GPUメモリ8Gの1080/1070ti/1070当たりがヤフオクで大分安くでてます・・・。そのへんを増設してマルチGPUをフェーズ2にしようかな・・・。Chainer v5にChainerMNが統合されたらしいので、マルチGPUが扱いやすくなってそう・・・

-続くー

「手元にGPUマシンを」シリーズインデックス

『手元にGPUマシンを』シリーズ投稿のインデックスページです。
動機。今までのあらすじ。まとめなど。(随時更新中・・・)


動機

今まで初期コスト0で始められるクラウドGPUインスタンスを使用していました。しかし開発中はコーディング/デバック/休憩/ご飯/犬の散歩/雑用etcで何かとアイドル時間が長く、クラウドVM上で開発するのはコスト的に効率が悪いという結論に至りました(まあ初めから分っていた事ですが)。こまめにインスタントを起動/終了して節約するのも悪くないですが何しろ面倒くさいです。なので今後は手元にGPUマシンを置き、時間課金を気にすることなく開発/デバック/犬の散歩を行い、GPUパワーが必要な時はクラウドGPU(特に割安なGCPのプリエンプティブインスタンスAWSのスポットインスタンス)でトレーニングを行う。というスタイルに変えようと思います。本シリーズは、この思惑を実現するために行った環境構築作業・費用などを記録したシリーズ投稿です。


現在までのあらすじ


現在までに掛かった費用

  • 第1回分      : 0円
  • 第2回分      : 70,000円
  • 第3回分      : 4,415円
  • 第4回分      : 991円
  • 第5階分      : 83,980円
  • フェーズ1完成時  : 159,386円
  • シリーズ通した合計 : 159,386円


GPUマシン(フェーズ1)構成

  • ケース    : 普通のミドルタワー
  • マザーボード : ASRock Fatal1ty X299 Gaming K6
  • CPU     : Intel Core i7  7800X (6コア12スレッド) 
  • メモリ    : DDR4-2400 16GB x 1 (Singleチャンネル動作)
  • GPU     : Palit Geforce GTX 1080Ti Super JetStream 風(Palit NEB108TS15LC-1020J )
  • ストレージ1 : M.2 SSD (512GB) ※Ubuntuインストール
  • ストレージ2 : SATA3 SSD(512GB) ※Win10インストール
  • ストレージ3 : USB3.0 外付けHDD (2TB) ※非冗長
  • 電源     : Stronger 700W 80PLUSスタンダート ※PCIe補助ケーブル(SiliverStone製)流用


最後に一言

とりあえずGPUマシン完成しました。しばらくこれで運用します。

-続くー

GCP認定~01「Google Cloud Platform」

GCP (Google Cloud Platform) 概要

現在Googleが提供しているクラウドサービスのブランドと特徴

GCPで提供している主なサービス

カテゴリ GCPサービス名 サービス概要
管理・運用 Cloud Console ブラウザ上の総合管理ツール(GUI)
Cloud Shell ブラウザ上で実行するコマンドラインインターフェース
Stackdriver 統合監視サービス
Cloud IAM ユーザーアクセス管理
コンピュート Compute Engine (GCE) 仮想マシンサービス
Container Engine (GKE) マネージドKubernetsサービス
App Engine (GAE) アプリケーションプラットフォーム
ストレージ Cloud Storage オブジェクトストレージ
データベース Cloud SQL マネージドRDBMSサービス
Cloud DataStore NoSQLデータベース
ネットワーク Cloud Virtual Network 仮想ネットワーク
Cloud Load Balancing ロードバランサ
Cloud DNS DNSサービス
Cloud CDN
ビックデータ Big Query
Cloud BigTable
Cloud Spanner
Cloud Dataflow
Cloud Dataproc マネージド Hadoop / Spark サービス
Cloud Pub/Sub
機械学習 Cloud Vision API 画像分析サービスAPI
Cloud Speech API 音声のテキスト変換サービスAPI
Cloud Translation API テキスト翻訳サービスを提供するAPI
Cloud Natual Language API 自然言語分析サービスを提供するAPI
Machine Learning Engine Tensorflowを使った機械学習環境。GPU/TPUを使用した大規模なトレーニングが行える