gettextのmo/poファイルを更新したらApacheを再起動する

PHP logo

サイトを国際化するにあたってgettextを使って、mo/poファイルを作って翻訳を行うということはよくあり、今触っているシステムでもFuelの下で(Fuelのi18nは使わずに)gettextを使って日本語版と英語版の切り替えを実現しています。当然、このファイルは頻繁に更新されるわけですが、ローカルで確認していると更新後にロケールが正しく取得されずに日本語版で英語が表示されてしまうことがよくあります。何度かページ更新したり、時間をおいたりすると直るんですが、ローカルならまだしも本番環境で同じことが起こったら軽く事故ですね。ファイルサイズとかサーバスペックとかでキャッシュ更新タイミングが決まってるのか、運良く本番環境では発生していなかったようですが。

続きを読む

サイトをSSLに対応させようと思って上手く行かなかった

website_normal.png 先日の日曜日、久々の何も予定がないお休みということで、朝からこの対応をしていたのだけど。 サイトをSSLに対応させないとGoogle Chromeに怒られるようになるらしい | mutter 上手く行かなかった。

上手く行かなかった原因

環境さえ整っていれば、SSLへの対応はとてもシンプル。
  1. 秘密鍵・CSRの作成、設定
  2. Let’s EncryptのCertbotをインストール
  3. 証明書を取得して設定
めちゃくちゃ雑に書くとこういう手順で行けるんだけど、僕の環境ではCertbotが上手く入らなかったし、その他でも色んな苦労があった。基本的な原因はもうすべてこれ。 サーバのOSが古い(CentOS 5.6) これに尽きます。このせいで、
  • OpenSSL0.9.8なので、wgetやcurlを使ってhttps経由でファイルを取得しようとすると失敗する
  • OpenSSL 1.0系は入らない
  • Certbotが要求するPythonは2.7以上だけど、サーバでは2.4
  • SLCに対応していないのでPython入れるのに一苦労。ソースコードダウンロードして手動でインストール
  • ここでもOpenSSLしんどい
  • 既存のPython置き換えるのどうすんだっけ
  • 関連モジュールとかいろいろ入らない
  • 何とか入れたはずだけどCertbotが上手く動かない
書き出すだけであーってなる。 さくらのSSLでラピッドSSL契約しても良いんじゃないのという話もあるけれど、ドメインを複数持っててサブドメインも複数あるんで、全部カバーするとすごいコストになっちゃう。出来るだけ無料でやりたい。 くそう。 多分、上手いこと回避してやる方法はあるとは思うんだけど、もともと習熟しているわけでは無い上に長いこと触ってなかったから1つ1つが時間掛かって仕事だったら給料返すレベル。 これはもう、引っ越すしかないのでは……(ヤケ)

続きを読む

サイトをSSLに対応させないとGoogle Chromeに怒られるようになるらしい

全てのHTTPサイトに「保護されていません」の警告、「Chrome 68」リリース – ITmedia エンタープライズ

米Googleは2018年7月24日、通信の内容が暗号化されないHTTPサイトについて、同日リリースしたWebブラウザ安定版の「Chrome 68」からは、全てに「Not secure(保護されていません)」の警告を表示すると発表した。  これは、WebのHTTPS暗号化を推進するGoogleが以前から予告していた措置。バージョン67までのChromeでは、HTTPサイトはアドレスバーのURLの左側に「i」のアイコンが表示され、クリックすると「このサイトへの接続は保護されていません」という警告が表示されていた。  これに対してChrome 68からは「i」のアイコンに加えて、「Not secure(保護されていません)」の文字が表示される。

マジかー。 ずっと対応しないとなあと思いながらもつい面倒で放置していた、自サイトのSSL問題。確認ウィンドウが出るとか、ページ遷移前に警告画面が表示されるとか、もっと派手にやるのかなと思ったけど、以外と大人しいのね。 ユーザー登録もコメント欄すらないので特に困らないと言えば困らない(フォーム送信するのはブログの管理ツールくらい)けど、まあでもそのうちもっと警告が大きくなるかも知れないし、ここらで対応しておく方がいいかな。。 幸い、今は無料で十分な機能を持つSSL証明書発行サービスがあるらしいので、次の休みにやろうかなと思います。こういうとこがレンタルサーバだと楽なんだけどなー。まあでもその自由が好きでVPSにしてるわけだから。自分で設定しないと。この面倒さ加減も趣味としては楽しみの一部ではあるね。

参考にする予定のサイト

Let's Encrypt 総合ポータル さくらVPSにSSL証明書を導入しHTTPS通信の構築

続きを読む

memcachedのセキュリティの話

【重要】memcachedのアクセス制御に関する注意喚起 | さくらインターネット

平素よりさくらインターネットに格別のご愛顧を賜り、誠にありがとうございます。  このたび、適切なアクセス制限を設定していないmemcachedがリフレクションDDoS攻撃 発信の踏み台として悪用されている事例がJPCERTコーディネーションセンターより報告 されました。  ▼「memcachedのアクセス制御に関する注意喚起」(JPCERTコーディネーションセンター)  https://www.jpcert.or.jp/at/2018/at180009.html  アクセス制限をせずにmemcachedを運用した場合、DDoS攻撃のほか、キャッシュデータ を第三者に参照され、情報漏洩が発生する可能性もございます。  お客さまにおかれましては、memcachedに適切なアクセス制限が設定されているかを今 一度ご確認いただき、不正に利用されないよう対策をお願いいたします。

そう言えばそんな話あったけど最近サーバの存在忘れてたなあと思って、久々に設定見直してみたらそもそもmemcached使ってなかったです。うちのサイトのキャッシュはKyotoTycoonでやってたんだった。そんで、今見てみたらKyotoTycoon、6年くらい開発止まってました。そうかー。6年もあるといろいろ変わるのですね。まあ今さら調べてテストして選定してコード書き換えてってするモチベーションが無いのでしないけど。 ていうかこの間、ちょっとした修正をする必要があったので仕方なくEclipse開いて(重い!)、コミットしたらそうだったSubversion使ってたんだったってなった。今仕事では全部Gitでやってるんだけど、そうだ昔はSubversionの方が多かったんだなあと遠い目になりました。Eclipseに比べるとAtomは軽くて良いなあ。Eclipseの方が多機能ではあるけど、Atomで十分やれてるし。Gitも慣れると使いやすくて気に入ってます。GitHub便利だし。コンフリクト怖くないし。 まあそういうわけなので、件名に戻ると、うちには関係なかったですということでした。 仕事で使ってるサーバの方は知らんけど、まあ多分なんかやってるでしょう。僕より全然優秀なエンジニアが管理してるので。

続きを読む

【メモ】 Amazon APIによる商品紹介が上手く動いていないとき

Amazon Amazon APIが上手く動いていない(例えば商品表示がすべて表示されていないなど)場合で、特に大きな仕様変更がない場合、サーバの時刻がずれていることがあります。特に、何らかの理由によりサーバの再起動が行われた場合には、時刻のずれに気付かないことがあります。本来であれば自動的に時刻合わせをしているはずなのですけど、シャットダウンのタイミングによってはntpdがエラーで正しく起動せず、時刻合わせが行われないと言うことがあるらしい。 というわけでこの場合には、管理者権限にて時刻のズレを確認した上で、時刻合わせを手動で行います。

# date ← サーバの時刻を確認
# hwclock --show ← ハードウェアクロックの時刻を確認
# /etc/init.d/ntpd stop
# ntpdate ntp.nict.jp ← 時刻合わせ
# /etc/init.d/ntpd start
ちなみにこれが理由で上手く動いていない場合の、Amazonからのレスポンスは「Amazon returned invalid HTTP response code 400」でした。400ってBad Requestでしょってことなんだけど、まあタイムスタンプズレてれば認証用パラメータも期限切れになるよね(という表現でいいのかわかんないけど)ということで。

続きを読む

Mac OS X 起動時にVirtualBox上のゲストOSを自動的に起動する

VirtualBox.jpg ローカルサーバを毎回手動で起動するのが面倒だったので、自動的に起動するようにしてみました。 ググって試行錯誤したんですが上手く行かず、結局こんな方法に。

1. シェルスクリプトを用意する

配置する場所はホーム直下で良いと思います。非表示フォルダではないところで。 ファイル名は適当で大丈夫です。

runvm.command

#!/bin/sh

vboxmanage startvm hogehoge --type headless

killall Terminal
「hogehoge」はVM名です。環境に合わせて設定してください。 「killall Terminal」は処理が正常に実行されたらターミナルを閉じる設定です。これがないと、実行後にターミナルが残ってしまって鬱陶しいので。

2. ログイン時に実行されるよう設定する

「システム環境設定 > ユーザとグループ」を開き、ユーザーを選択。「ログイン項目」タブを表示して、上で用意したシェルスクリプトを登録。 以上で終わり。 やり方は色々あるみたいだし、これが正しい方法とは思えないけれど、上手く出来なかったので。 もう少し解ってる人は、もう少しきちんとした方法をとるべきだと思います。

参考記事

shell – Macでログイン時にスクリプトを実行する(Automator不使用) – Qiita OSX のターミナルを終了時に自動で閉じたい – Windows 2000 Blog

参考にしたかったけど上手く動かせなかった記事

VirtualBox上のゲストOSのブート&スナップショット撮影の自動化 – まんぼう日記 Mac OS Xで使って便利な「ログインフック」 – builder by ZDNet Japan OSX – OS X で起動時に任意のコマンドを実行する – Qiita

続きを読む

【メモ】 CUIに実行ログを書き出す(1行を上書きしていく) 【PHP】

やりたいこと

フレームワークのタスクなどを実行する際に、きちんと進行しているかインジケータを表示させたい。ただし、処理数分だけ行数を重ねるのではなくて1行に上書きしていきたい。上手く説明できなくて歯がゆいんですけど、つまりこうではなくて、
doSomething ...  1/5
doSomething ...  2/5
doSomething ...  3/5
doSomething ...  4/5
doSomething ...  5/5 finished
こう。
doSomething ...  5/5 finished ← この行だけで更新されていく
わかりますかね…

続きを読む