サイトリニューアルの話がなんだか大掛かりになってきてる【#np2020】

ノマドワークのプログラマー ※リニューアルあるあるです 少し前に サイトのリニューアルをしようかな という話を書きまして、ローカルでBootstrapでテンプレート作ったり、SSLに対応させたり してたんですが、その過程で重要度の低いサイトから順に、GitHubと連携させつつsvnからgitに移行としようとしていて衝撃が。サーバのOSが古すぎて最新版のOpenSSLが入らず、GitHubと連携できない。マジで。 使っているOSはCentOS5.6で確かに古い。今のサーバ(さくらのVPS)を契約した時点で既に大分枯れていたと思うんだけど、使い慣れてるからって言う理由で選択したんだよね。個人サイトの環境なんだからもっと冒険しておけば良かった。 ここでGitHubを諦めるという選択肢ももちろんあるんですけど、仮にサーバが止まっても収入がなくなるわけでも責任問題になるわけでもなし、じゃあもこの際サーバを引っ越しましょうかということに。なんでそうなる。

続きを読む

【メモ】Vagrant で共有フォルダのマウントに失敗する

vagrant.pngのサムネイル画像 試したいことがあって通常使用しているのとは別にテスト用にレポジトリをcloneしてVMを作るということをしたらば、次の様なエラーが。

Vagrantで共有フォルダのマウントに失敗するときの対処方法 – Qiita

Failed to mount folders in Linux guest. This is usually because the “vboxsf” file system is not available. Please verify that the guest additions are properly installed in the guest and can work properly. The command attempted was: (中略) The error output from the last command was: /sbin/mount.vboxsf: mounting failed with the error: No such device

要するに共有フォルダがマウントできない、そもそもvboxsfが見つからんと言われているみたいです。Guest Addtionsがちゃんと読み込まれてないっぽい? 上記エントリではプラグイン「vbguest」をインストールしておけば解決してくれると書かれているのですが、僕の環境ではどうも解決してくれない。「解消しない場合」という項目にあったこちらを参照したところ、逆に「vbguest」が問題になるケースがあるとのこと。 つまりこう:

vagrant-vbguestプラグインがGuestAdditionsを無効にしてしまう – Qiita

  1. VirtualBoxのバージョンとGAのバージョンが異なるためvbguestプラグインがGAの再ビルドを始める
  2. インストール済みGAが削除される
  3. アクティブなkernelと同じバージョンのkernel-develをインストールしようとするが、より新しいkernelが公開されているのでみつからない
  4. GAのビルドが失敗し、GAが動作しない状態に

なるほど。 結局どうしたらいいかっていうと、Guest OSのkernelをアップデートすれば幸せになれるらしいので、次のコマンドを実行。
$ vagrant ssh -c 'sudo yum update -y kernel'
$ vagrant reload
その上で vagrant reload してやると、
  1. 正しい kernel-debel を取得する
  2. 正常に GuestAddtions が更新される
  3. 正常にマウント出来る
という流れで無事起動に成功。 軽くハマって余計な時間食っちゃった。 とりあえず直って良かったです。感謝。

続きを読む

ブログをSSL化しました。

03_01.jpg 自動的にリダイレクトするようにはなってますが、今後は以下のURLでアクセスしてください。 よろしくお願いします。 https://nplll.com 長いこと「やらなきゃなー」と思いつつ面倒で放置していたんですけど、ちょっと時間が取れそうなタイミングが合ったのでえいやっとやってみました。結果から書くと、SSLに対応するだけだったらくっそ簡単なので、コマンドライン打つのに抵抗が無い程度の人はみんな今すぐやったら良いと思う。もっと早くやれば良かった。うちの環境は、ムームードメイン+さくらVPSなんだけど、さくらのSSLを使えば超簡単にできるのでオススメ。価格も年972円と超安い。 具体的な作業手順はこちらを参考にしてください。 SSL証明書を取得しよう – Qiita さくらVPSにSSL証明書を導入しHTTPS通信の構築 – Qiita サイト認証とか確認とかクローラー巡回のタイミング次第で10-30分程度の時間が掛かる場合もあるけれど、順を追ってやっていけば大丈夫。

続きを読む

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

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

PHPでgettextする際の注意事項というか、setlocaleの罠 – tohokuaikiのチラシの裏

罠3 Apacheを再起動せよ なんか、setlocaleが成功したり失敗したりする。。。。 検索したらPHPドキュメントのコメントが・・・。 PHP: setlocale – Manual

Omer Sabic On Linux/Apache, when you install and try to use a new locale, the setlocale() function with the new locale will fail sometimes, but not always. To furthermore complicate, setlocale() will always complete with any of the previously installed locales. This would seem a really weird behaviour, which you can fix by restarting Apache, as Kari Sderholm aka Haprog mentioned, but I felt it needed to be properly pointed out.
Apacheを再起動せよと・・・・。 確かに治った。

なるほど。そしてリリース手順に「services httpd graceful」を組み込んだら、ロケールの設定に失敗することがなくなりました。おおー。これまでモヤモヤしてたのが解決してスッキリしてよかったけど、でもまじかー。こんな簡単なことだったのか。

続きを読む

サイトを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

続きを読む