AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

Slack はとりあえず絵文字をぶっこめ

年明けからリモートワークが導入されました。といってもコーダかつ SES 受託受けてるみたいなプレイヤーの人たちが対象で、一次対応の人員は物理オフィスに毎日集合!といった従来からのワークスタイルです。

で、今日この辺の記事で読んで「ふむ!」と思ったので、一つ心がけている事を。

とにかくリアクションをつけまくる

これ。

Slack でやりとりしてるとテキストだけなので感情がわかんねえな!というのはリンク先でもおっさってる通りで、じゃあどうする→ emoji で解決や!というのは実際わりと有効です。

  • とりあえず悩んだら thinking_face
  • お願いする時は bow
  • 肯定するときは ok_woman ok_man ok_hand
  • 「マージできたよ!」みたいな小規模のうれしみには clap
  • 「リリースでけた!」みたいな大きめのうれしみには tada
  • 「コンフリクトした……」みたいなかなしみには joy sob scream
  • お客さんから無茶苦茶いわれて「そんなぁ」みたいなお気持ち表明には face_vomiting
  • めっちゃ詰まって「ぼすけて!」みたいなお気持ち表明には party_hard のような gif をカスタムアイコン登録!
    • (めっちゃピカピカするのでヤメろぉ!というお気持ち表明されたらやめようね!)

自分で利用しているのは主にこのあたりです。 あとはビールのアイコンでお気持ち表明したり、包丁を構えた三代目のアイコンで「?」というお気持ちを表明したり。 やりすぎると「うぜぇ!」と言われますが、「○○終わりました!」→無反応、だとわりかし不安になるので、テキストでなくても何かしら反応をかえしてあげるといいね、というお気持ちです。 特にこれからの時期、新社会人など新しく参加してくるひとなど、言葉でフォローすると返事されてめんどいけど放置するのもナ……、と思ったら、 emoji だけでも付けてあげるとよいと思います!

追記

ザ・マンの「私はいいと思う」の画像は汎用性がめっちゃ高いので、一枚はピクチャフォルダに忍ばせておくのをオススメします。

Apache でリバースプロキシしてカジュアルに Basic 認証

ネットワーク環境の更新により、社内ネットワークで動作させていた検証環境を VMimport で AWS に出したのですが、冷静に考えて認証もなしにインターネットに解き放つとは……という感じなので、ついでに Basic 認証をつけました。というお話。

ロケ地:CentOS 6.8 / Apache 2.2 / webrick

単一インスタンスに複数の環境

大分古い Rails アプリケーション( 環境が webrick のあたりで… ) が複数動いている環境があり、ポートを 3001 から順番に付与して動作させておりました。社内ネットワークであれば FW の内側なので、認証もクソも考えること無く http://192.168.0.100:3001 とかでアクセスさせれば良いのですが、インターネットに解き放つとなると話は別です。

そもそも検証環境なので、サーチエンジンにクローリングされて本番と混同されたらマズいよね robots.txt 書こうねとか、振る舞いのよくないクローラに拾われても被害が最小限になるように認証かけとこうね?みたいな話ですね。

最初は特に考えず pound を利用していた

どうせアクセスしてくるユーザも限られるし Pound でいいか!ってお気持ちで以下のような config で Pound 投入しておりました。

pound.cfg

User        "nobody"
Group       "nobody"
LogLevel    1
Alive       10
Daemon      1
LogFacility local1

ListenHTTP
    Address    0.0.0.0
    Port       80

  Service
    HeadRequire "Host: web1.example.com"
    BackEnd
        Address 127.0.0.1
        Port    3001
        TimeOut 60
    End
  End

  Service
    HeadRequire "Host: web2.example.com"
    BackEnd
        Address 127.0.0.1
        Port    3002
        TimeOut 60
    End
  End

  Service
    HeadRequire "Host: web3.example.com"
    BackEnd
        Address 127.0.0.1
        Port    3003
        TimeOut 60
    End
  End
End

認証ないのはだめでは?認証いれよ!

環境の都合上、 any にウェルカム!なのはよくないので、 Basic 認証を入れることにしました。しかし Rails アプリケーションは public/.htaccess などを設置してお手軽に Basic 認証できません。そら authenticate_or_request_with_http_basic とか書けばいいけど、検証環境なので勝手にコードに手を入れるのはね?というお気持ち。 なので、入れた Pound を捨てて Apache をご利用します。今回は環境分ドメインが存在しているため、簡単に書けるネームベースの VirtualHost に個別でリバースプロキシと Basic 認証の設定を書きました。

yum install httpd httpd-devel apr apr-util
htpasswd -c /etc/httpd/htpasswd basic
vi /etc/httpd/conf/httpd.conf
/etc/init.d/httpd start

httpd.conf

## snip ##

Listen 80
NameVirtualHost *:80

<VirtualHost *:80>
  ServerName web1.example.com
  ProxyPass / http://127.0.0.1:3001/
  ProxyPassReverse / http://127.0.0.1:3001/
  <Location "/">
    AuthType Basic
    AuthName "Basic Authentication"
    AuthUserFile /etc/httpd/htpasswd
    Require user basic
  </Location>
</VirtualHost>

<VirtualHost *:80>
  ServerName web2.example.com
  ProxyPass / http://127.0.0.1:3002/
  ProxyPassReverse / http://127.0.0.1:3002//
  <Location "/">
    AuthType Basic
    AuthName "Basic Authentication"
    AuthUserFile /etc/httpd/htpasswd
    Require user basic
  </Location>
</VirtualHost>

<VirtualHost *:80>
  ServerName web3.example.com
  ProxyPass / http://127.0.0.1:3003/
  ProxyPassReverse / http://127.0.0.1:3003/
  <Location "/">
    AuthType Basic
    AuthName "Basic Authentication"
    AuthUserFile /etc/httpd/htpasswd
    Require user basic
  </Location>
</VirtualHost>

おしまい

これで Rails アプリケーション部分に手を加えることなく、Apache のみでリバースプロキシと Basic 認証を導入することができました。ベストかどうかはわからんけど、 Production 環境でなければままえあろって感じです。

Ruby が利用している OpenSSL のバージョン

このへんに記載された通り、 rubygems.org への通信が TLS1.2 以上じゃないとだめになるので、 OpenSSL のバージョンが 1.0.0t あたりじゃないとだめだったきがする! と思い出して、確認をこめて。

 2018-03-15 19:08:20 ⌚  |2.4.1| Users-MacBook-Pro in ~
○ → ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin15]

 2018-03-15 21:36:09 ⌚  |2.4.1| Users-MacBook-Pro in ~
○ → ruby -ropenssl -e "p OpenSSL::OPENSSL_VERSION"
"OpenSSL 1.0.2k  26 Jan 2017"

 2018-03-15 21:36:17 ⌚  |2.4.1| Users-MacBook-Pro in ~
○ → ruby -ropenssl -rfiddle -e 'puts Fiddle::Function.new(Fiddle.dlopen(nil)["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)'
OpenSSL 1.0.2k  26 Jan 2017

なるほどなーオッケー。

AWS に VM Import して失敗するときは vmdk を利用してみよう

という学びがあった。 そもそもこんなもん早々おきねーよ!という戒めを含めてメモ代わりに記載する。

AWS VM Import

docs.aws.amazon.com

Qiita やら classmethod やら読んだけど、結局公式の解説が一番簡潔だった。 問題は、公式の日本語が理解しにくい書き方であることで、AWS 君ドキュメントはもっとわかりやすく書こうね!というお気持ち。

Unsupported non-ASCII characters found in OVF file path

金曜日夕方にインポートタスク投げておいたの忘れてて、まあ終わってるじゃろ?と思いながら鉄腕 DASH みつつ確認したら "Status": "deleted" などとなっており真顔になる。 失敗時以下のようなログであった。

○ → aws ec2 describe-import-image-tasks --import-task-ids import-ami-XXXXXXXX
{
    "ImportImageTasks": [
        {
            "Status": "deleted",
            "LicenseType": "BYOL",
            "Description": "ANKEN-vmimport",
            "SnapshotDetails": [
                {
                    "UserBucket": {
                        "S3Bucket": "ANKEN-vmimport",
                        "S3Key": "vmimage.ova"
                    },
                    "DiskImageSize": 0.0,
                    "Format": "OVA"
                }
            ],
            "StatusMessage": "ClientError: Disk validation failed [OVF file parsing error: Unsupported non-ASCII characters found in OVF file path.]",
            "ImportTaskId": "import-ami-XXXXXXXX"
        }
    ]
}

あーん?

原因

わからん! ちなみにこの OVA イメージはローカルの VagrantVirtualBox)から採取したもので、一度 ESXi 6.5 にインポートして動作確認しておりました。 何がわるいんじゃー?といった感じでしたが、同じ仮想マシンから採取した vmdk があったので、 "Format": "vmdk" と指定して再度タスクを投げてみました。

○ → aws ec2 describe-import-image-tasks --import-task-ids import-ami-XXXXXXXX
{
    "ImportImageTasks": [
        {
            "Status": "active",
            "LicenseType": "BYOL",
            "Description": "ANKEN-vmimport",
            "Progress": "28",
            "SnapshotDetails": [
                {
                    "UserBucket": {
                        "S3Bucket": "ANKEN-vmimport",
                        "S3Key": "vmimage.vmdk"
                    },
                    "DiskImageSize": 8407928320.0,
                    "Description": "vmimport",
                    "Format": "VMDK"
                }
            ],
            "StatusMessage": "converting",
            "ImportTaskId": "import-ami-XXXXXXXX"
        }
    ]
}

ああん?!動いたやんけェ、どういうこっちゃ!

結論

というわけで出力した形式が違うだけでなんでこんなことに……みたいな感じで頭を抱えております。 が、 AWS VM Import で OVA 形式を利用していてうまくインポートできねーな?みたいな状態になったら vmdk を利用してみてください。

退職しました

なんやかんやと事情があり、1月末でお世話になっていた会社を退職してました。 経験値を積む意味でも、しばらくフリーランスとしてやっていきの所存。

いうてまあ在職してた会社と契約してるんですけどネ。ガハハ!

自家製 Ricty から Cica フォントのお引っ越しした

した。

Cicaフォントを使ってVimをオシャンティーにする設定 | tmnm.tech

シャレオツになった。あと自家製 Ricty より滑らかで視認性が上がったの嬉しい。 エディタのフォントは Ricty で満足してたのがはなまるになったね!

Vagrant をアップデートする

WindowsVMUSB2.0 を使いたくてぷらぎん入れようとしたら「新しい VirtualBox あるから入れてね」と言われるなど。 なもんで、 VirtualBox をアップデートした所 Vagrant が「やだ!小生古い VirtualBox じゃないと起動できないからやだ!」と言い出したので、アップデートして新しい VirtualBox に適合するナリ。

ロケ地:macOSX 10.11.6

Vagrant のバージョン

  • before
    • 1.8.1
  • after
    • 2.0.2

どうした

公式サイトから dmg 落としてきてアップデートしたあと、 vagrant up すると以下のメッセージが出て来るので vagrant plugin update する

○ → vagrant up
Vagrant failed to initialize at a very early stage:

The plugins failed to initialize correctly. This may be due to manual
modifications made within the Vagrant home directory. Vagrant can
attempt to automatically correct this issue by running:

  vagrant plugin repair

If Vagrant was recently updated, this error may be due to incompatible
versions of dependencies. To fix this problem please remove and re-install
all plugins. Vagrant can attempt to do this automatically by running:

  vagrant plugin expunge --reinstall

Or you may want to try updating the installed plugins to their latest
versions:

  vagrant plugin update

Error message given during initialization: Unable to resolve dependency: user requested 'vagrant-vbguest (> 0)'

おしまい。