memo.xight.org

日々のメモ

CloudFrunt - a tool for identifying misconfigured CloudFront domains

Summary

CloudFrunt is a tool for identifying misconfigured CloudFront domains.

CloudFrunt は誤って設定されたCloudFrontドメインを特定するためのツールです。

For CloudFront in particular, most AWS customers with a single distribution can protect themselves by adding a wildcard domain (such as *.disloops.com) to the "Alternate Domain Names (CNAMEs)" field.

CNAME にワイルドカードを追加することで防ぐことが可能。

Reference

disloops - 2018-01-02 - CloudFront Hijacking
https://disloops.com/cloudfront-hijacking/

GitHub - disloops / cloudfrunt
https://github.com/disloops/cloudfrunt

カスタムドメインの GitHub Pages + CloudFlare で HTTPS を使う

Summary

GitHub Pages で運用している ill-formed.com, well-formed.org をHTTPS対応させた。

1. CloudFlare でドメイン名を入力

CloudFlare - Add Websites

2. DNSレコードを確認

CloudFlare - Verify DNS Records
"Continue" をクリック

3. プランを選択

CloudFlare - Select a plan
"Free Website" を選択

4. ネームサーバの変更

CloudFlare - Change Your Nameservers
指定されたネームサーバに変更する

5. ネームサーバの変更待ち

CloudFlare - Change Your Nameservers
ネームサーバの変更が CloudFlare 側で確認できるまではこのような画面に。

6. Crypto タブからHTST 対応

CloudFlare - Crypto
Always use HTTPS, HTTP Strict Transport Security (HSTS) の設定を行う。

Reference

Qiita - superbrothers - 2016-06-05 - カスタムドメインの GitHub Pages で HTTPS を使う
https://qiita.com/superbrothers/items/95e5723e9bd320094537

Debian Stretch に PHP5.6 と PHP7.0 を共存させる

Summary

Debian StretchのオフィシャルリポジトリにはPHP5.6が含まれていない。
packages.sury.org のPHP5.6のパッケージを利用して、PHP5.6, PHP7.0 の環境を共存させたい。

sury.orgのgpgキーを追加

$ sudo apt-get install apt-transport-https
$ curl https://packages.sury.org/php/apt.gpg | sudo apt-key add -

- /etc/apt/sources.list.d/deb.sury.org.list
[src]
deb https://packages.sury.org/php/ stretch main


php5.6, php7.0のインストール

$ sudo apt-get update
$ sudo apt-get install php5.6-cli php5.6-fpm php7.0-cli php7.0-fpm


/etc/nginx/site-available/site-with-php7.0

server {
	listen 8870 default_server;
	listen [::]:8870 default_server;
	server_name _;
	root /var/www/site-with-php7.0;
	index index.php;
	location / {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/run/php/php7.0-fpm.sock; # adjust for the listen setting discussed above
	}
}

/etc/nginx/site-available/site-with-php5.6

server {
	listen 8856 default_server;
	listen [::]:8856 default_server;
	server_name _;
	root /var/www/site-with-php5.6;
	index index.php;
	location / {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/run/php/php5.6-fpm.sock; # adjust for the listen setting discussed above
	}
}

シンボリックリンクの作成, nginxの再起動

$ ln -s ../sites-available/site-with-php5.6 /etc/nginx/sites-enabled
$ ln -s ../sites-available/site-with-php7.0 /etc/nginx/sites-enabled
$ systemctl reload nginx.service


via

pehapkari.cz - 2017-03-27 - Multiple PHP versions, the easy way
https://pehapkari.cz/blog/2017/03/27/multiple-php-versions-the-easy-way/

/dev/log がなくなった場合の対応

Summary

/dev/log が見つからないエラーが発生…。

logger: socket /dev/log: No such file or directory

/run/systemd/journal/dev-log から /dev/log にシンボリックリンクを作成

sudo ln -s /run/systemd/journal/dev-log /dev/log


Reference

askubuntu - 2016-11-18 - Ubuntu Lost /dev/log symlink?
https://askubuntu.com/questions/850848/ubuntu-lost-dev-log-symlink

Mechanize でパースできないHTMLを強引に処理する

Summary

Mechanizeは、HTML (Content-Type: text/html) をパースする際にMechanize::Pageを利用する。
しかし、パースするHTMLがwell-formedではない場合、パースに失敗する。

Mechanize::Page で処理

require 'mechanize'

agent = Mechanize.new
agent.pluggable_parser['text/html'] = PlainFile
page = agent.get("http://example.com/")
p page


#<Mechanize::Page
 {url #<URI::HTTP http://ill-formed.com/>}
 {meta_refresh}
 {title "ill-formed.com"}
 {iframes}
 {frames}
 {links}
 {forms}>

Plain Textで処理

require 'mechanize'

class PlainFile < Mechanize::File; end

agent = Mechanize.new
agent.pluggable_parser['text/html'] = PlainFile
page = agent.get("http://example.com/")
p page


#<PlainFile:0x00007fb8d2077910
 @body=
  "<!doctype html>\n" +
  "<html>\n" +
  "<head>\n" +
  "    <title>ill-formed.com</title>\n" +
  "\n" +
  "    <meta charset=\"utf-8\" />\n" +
  "    <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />\n" +
  "    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n" +
  "\t<link rel=\"stylesheet\" type=\"text/css\" href=\"main.css\" />\n" +
  "</head>\n" +
  "\n" +
  "<body>\n" +
  "<div>\n" +
  "    <h1>ill-formed.com</h1>\n" +
  "\t<p>This domain is established to be used for ill-formed HTML test. <!-- </p> -->\n" +
  "<!-- </div> -->\n" +
  "<!-- </body> -->\n" +
  "<!-- </html> -->\n",
 @code="200",
 @filename="index.html",
 @full_path=false,
 @response=
  {"server"=>"GitHub.com",
   "date"=>"Thu, 05 Oct 2017 14:55:52 GMT",
   "content-type"=>"text/html; charset=utf-8",
   "transfer-encoding"=>"chunked",
   "last-modified"=>"Thu, 05 Oct 2017 14:55:35 GMT",
   "access-control-allow-origin"=>"*",
   "expires"=>"Thu, 05 Oct 2017 15:05:52 GMT",
   "cache-control"=>"max-age=600",
   "content-encoding"=>"gzip",
   "x-github-request-id"=>"F5F8:1F5B:54E8B4B:7C0A75B:59D647F8"},
 @uri=#<URI::HTTP http://ill-formed.com/>>

crontab -e で temp file must be edited in place

Summary

crontab を編集する際、エラーが発生して crontab が編集できない。

crontab: no crontab for [USERNAME] - using an empty one
crontab: temp file must be edited in place

原因は, vim が作成する自動バックアップファイル。
/tmp, /private/tmp でバックアップをさせないようにすればよい。

.vimrc

set backupskip=/tmp/*,/private/tmp/*

Reference

yuyarinの日記 - 2010-02-25 - Mac OS X で cron を使う(EDITOR=vim)
http://d.hatena.ne.jp/yuyarin/20100225/1267084794

Docker for Mac を Remote APIから使う

Docker server側 で docker-proxyを起動

$ docker run -p 3375:2375 --name docker-proxy -v /var/run/docker.sock:/var/run/docker.sock -d -e PORT=2375 shipyard/docker-proxy


Docker client側 で 環境変数を設定

環境変数 DOCKER_HOST にdocker serverのIPアドレス:ポート番号を指定

$ export DOCKER_HOST="tcp://192.168.0.254:3375"
$ docker ps
CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                    NAMES
0123456789ab        shipyard/docker-proxy   "/usr/local/bin/run"   2 minutes ago       Up 2 minutes        0.0.0.0:3375->2375/tcp   docker-proxy


Reference

Docker Community Forums - 2016-06-16 - Remote API with Docker for Mac (BETA)
https://forums.docker.com/t/remote-api-with-docker-for-mac-beta/15639/5

gemの一括uninstall

Summary

gem uninstall -aIx $(gem li --no-versions | grep -v -E "bigdecimal|io-console|json|openssl|psych|rdoc")


fishの場合

gem uninstall -aIx (gem li --no-versions | grep -v -E "bigdecimal|io-console|json|openssl|psych|rdoc")


Reference

Qiita - hachi8833 - インストールされているgemを一括で削除する
http://qiita.com/hachi8833/items/e6b0380c3b6d5e115e36