zuntan02のはてなブログ

備忘録的なものです。時々職場の技術者ブログにも転記してますが、メインはこちらで。

MySQL5.6.8以前と以後とでquery_cache_typeのデフォルト値が違うので注意

5.6.8以前はquery_cache_size=0のものを適当に大きな値にしてやればOK、だったのが、
以降は明示的にquery_cache_type=1にしてやる必要がある。

> (MySQL 5.6.8 より前では、1 のデフォルトの query_cache_type で、デフォルトのサイズは 0 です。)
MySQL :: MySQL 5.6 リファレンスマニュアル :: 8.9.3.3 クエリーキャッシュの構成


なんか古い手順のままやってたらどうしてもキャッシュされてなくてあれ?みたいなことが。。。

↓こんな感じだった

mysql> SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| have_query_cache | YES   |
+------------------+-------+

mysql> show variables like 'query_cache_%';
+------------------------------+-----------+
| Variable_name                | Value     |
+------------------------------+-----------+
| query_cache_limit            | 1048576   |
| query_cache_min_res_unit     | 4096      |
| query_cache_size             | 524288000 |
| query_cache_type             | OFF       |★これ★
| query_cache_wlock_invalidate | OFF       |
+------------------------------+-----------+

mysql> SHOW STATUS LIKE 'Qcache%';
+-------------------------+------------+
| Variable_name           | Value      |
+-------------------------+------------+
| Qcache_free_blocks      | 1          |
| Qcache_free_memory      | 524269912  |
| Qcache_hits             | 0          |
| Qcache_inserts          | 0          |
| Qcache_lowmem_prunes    | 0          |
| Qcache_not_cached       | 1339960605 |
| Qcache_queries_in_cache | 0          |
| Qcache_total_blocks     | 1          |
+-------------------------+------------+

メモまで。

さくらのクラウドでロードバランサ使うときはループバックアドレス設定が必要

さくらのクラウドでロードバランサしつつ逆引きする

逆引き例

ex) nslookup 1xx.2xx.1xx.2xx

name = fugafuga.hogehoge.jp.
とかが返ってくる様にしたい。

設定方法

さくらのクラウドでロードバランサを利用する場合

1)[さくらのクラウド管理画面]ルータ+スイッチで16IP付きのものを契約
2)ロードバランサでバランシングされる対象のサーバに対してloopbackアドレスを設定する

/etc/sysctl.confファイルに以下の2行の設定を追記します。

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

# arp_ignore 1 - reply only if the target IP address is local address
# arp_announce 2 -reply only if the target IP address is local address
# arp(アドレス解決プロトコル)に反応させないのはmacアドレスを覚えさせないため
# 負荷分散させたときに、送りたい機器へ通信がいくようにする

lo:0デバイスの作成

vi /etc/sysconfig/network-scripts/ifcfg-lo:0

DEVICE=lo:0
IPADDR=仮想IPアドレス
NETMASK=255.255.255.255

設定後、”ifup lo:0″コマンドで設定を反映

→同一サーバに2個以上付与するときは、lo:1,lo:2など増やしていきます。
【参照】http://knowledge.sakura.ad.jp/beginner/3529/

3)[さくらのクラウド管理画面]ロードバランサの「VIP」に上記逆引きできるIPを登録、該当サーバの80/443などにバランシング設定します
4)DNSで上記VIPへの正引きを設定しておきます。

 →ドメイン名で該当サーバに流入することを確認

5)[さくらのクラウド管理画面][スイッチ]でルータの[IPアドレス]について、逆引きさせたいものを該当IPの「ホスト名」に記載します

以上

【Apache】IPとQueryStringの値によってアクセス制限/BASIC認証

【目的】
Aipoのタイムカード操作についてのみ、許可IP以外からはBASIC認証としたい

【参考】
ApacheでQueryString(URLパラメータ)の値によってBASIC認証をかけたい!
qiita.com

こちらが大変参考になった。ただ、上記にある
> RewriteRule (.*) $1 [E=admin_access:1]
だと、すべてをいったんリライトしてしまっていて、タイムカードのPOSTがGETになる件
hakobe932.hatenablog.com
があって、期待通りに動作しなかった。

【解決】
上記のキモはenvに値を載せて、その値があるときだけBasic認証、なので、リライトしない(-)
> RewriteRule .* - [E=admin_access:1]
でいいのかなと。

Aipoではタイムカードを投稿・修正するとき「template=ExtTimecard」というクエリストリングがPOSTされているので、これを条件にして以下の様にしてみました。

※なお、Aipoは
ameblo.jp
この辺参考に、tomcat直じゃなくてapache経由で接続している前提で、あくまでApacheのallow/denyで解決しています。

Basic認証する場合

RewriteEngine On
# 許可IP群でない、かつクエリストリングがマッチしたらtmcrdに1
RewriteCond %{REMOTE_ADDR} !^xxx.xxx.xxx.xxx
RewriteCond %{REMOTE_ADDR} !^xxx.xxx.xxx.xxx
RewriteCond %{QUERY_STRING} template=ExtTimecard
RewriteRule .* - [E=tmcrd:1]

<Location />
    Order allow,deny
    Allow from All
    Deny from env=tmcrd
    
    AuthType Basic
    AuthName "Restricted Area"
    AuthUserFile "/hoge/fuga/.htpasswd"
    Require valid-user
    
    Satisfy Any
</Location>

Basic認証がいらない場合

RewriteEngine On
# 許可IP群でない、かつクエリストリングがマッチしたらリライトせず403終了
RewriteCond %{REMOTE_ADDR} !^xxx.xxx.xxx.xxx
RewriteCond %{REMOTE_ADDR} !^xxx.xxx.xxx.xxx
RewriteCond %{QUERY_STRING} template=ExtTimecard
RewriteRule .* - [F]

【VHSビデオテープをPCに取り込んだメモ・2014年-2016年】

VHSテープ2年ほどかけてPCに取込んでいて、割と安定したかと思うので、経緯とか含めてちょっとまとめておきます。

【経緯】

・5台ほど持っていたVHSのビデオデッキが次々と壊れてしまって、とうとう完動品がゼロに。
・押し入れには数百本のVHSビデオテープ(主に90年代に録画したアニメなど)がある。
いまさら見返すこともない、とは思えど、捨てるために(保険として)”とりあえず”デジタル化することにした。

【取り込み(VHS→mpeg2-ts)を行ったセット】

・VHSデッキ:SONY SLV-R100ハードオフで5000円位で購入。このシリーズの「リアリティー・リジェネレーター」が個人的に重要で結構探した)
f:id:zuntan02:20160619073350j:plain
・キャプチャユニット:I-O DATA GV-USBGV-USB2ではなく、その前のモデル。2010年頃に4000円位で買ったもの)
f:id:zuntan02:20160619074049j:plain
・PC&OS:MacBook (13-inch, Aluminum, Late 2008)(2.0GHz Core 2 Duo/メモリ8GB)にWindows8→途中から10
・ストレージ:USB外付けHDD、3TB*3台

・取り込みソフト:VLC Media Player 2.1.0(フリー)※
 →ファイル形式:MPEG-2(TS)
・ファイル分割ソフト:MurdocCutter(フリー)
・mp4化:Freemake Video Converter(フリー)
VLCのバージョンについて
何となく最新版にアップデートしてみたところ、directshow(GV-USBからの取り込み)ができなくなってしまいました。
バージョンを落としながら確認していったところ、現在は2.1.0で安定動作しています。


【取り込み手順図解】

1)キャプチャユニットはビデオ入力にのみ利用。音声はライン入力とした(音声がうまく入力されなかったので)
f:id:zuntan02:20160619073946j:plain
f:id:zuntan02:20160619073922j:plain

2)キャプチャユニット付属のチェックツールで画面が表示されることを確認
f:id:zuntan02:20160619073948j:plain
f:id:zuntan02:20160619074001j:plain

3)VLCで取り込み
f:id:zuntan02:20160619074311j:plain
f:id:zuntan02:20160619074400j:plain
※音声はOSのライン入力レベルで調整
f:id:zuntan02:20160619074512j:plain

【取り込んだ後のtsファイル分割について】

適当に録画した映像をMurdocCutterでちまちま分離するのが結構楽しかった。
こんなの録画してたっけ!?みたいな。
MurdocCutter:地デジなどMPEG2-TSファイルの頭出しやCMカット等、簡単な編集を行えるフリーソフト - ぼくんちのTV 別館

【分割後のmp4化】

Freemake Video Converterウォーターマーク入るようになったので使用中止。
Handbreak
で簡単に。ソースの画質がアレなので、画質にはこだわりなし。初期値でGo。

【一時試してたけどやめたセット】

PCが専有されるのがつらくて、取り込み専用機を購入してみた。

専用ハードウェア:アナ録(GV-VCBOX)


けど、下記に示す理由でやめた。

やめた理由:
・GV-USBで取り込んだものに比較してかなり画質が荒い。
・妙に輝度が高い。派手に白飛びする。アニメの主線が潰れるレベル。
・mpeg4化することでファイルサイズの圧縮を期待したけど、mpeg2-tsと比較して殆どサイズに違いが無かった
・フォーマットがFAT32のみなので、FAT32のファイルサイズ上限:4GBでファイルが分割される。PCに取り込んでからフリーのツールでくっつけることは可能だけど、この機材単体では厳しい。

※簡単で至極直感的にアナログビデオからデジタル化できる/PCを占領されない、など画質へのこだわりがなければとても良い製品だと思う。あくまで手持ちのGV-USBと比較すると全く劣って見えた、ということで。


【感想】
見返してみて、あんまりお宝映像みたいなのはなかったけど、20年前の自分がどんなものを見て、どんなものを残そうとしていたのか、を思い出せて、結構楽しい経験だった。ビデオテープは何袋も捨てたけど(多分2~300本?)、結局そんなに空間が自由になったわけでもなく。空いた分はあっという間に本が埋め尽くしたという。うーん、次はアレか、書籍の自炊。修羅の道だなぁ……

Bashメモ

Ctrl+A 行の先頭
Crtl+E 行の最後
Ctrl+D カーソル場所を一文字削除
Ctrl+H Backspaceと同じ(左を一文字削除)
Ctrl+L 画面のクリアとカレント業の再表示
Ctrl+C 処理中断
Ctrl+S 画面の出力を停止(裏で処理は動いている)
Ctrl+Q 画面の出力を再開
Ctrl+Z 処理を一時停止(サスペンド
→Ctrl+zのあと:
fgコマンドで一時中断していたジョブをフォアグラウンドで実行再開
bgコマンドで一時中断していたジョブをバックグラウンドで実行再開

【AWS】(AmazonLinux・CentOS)nginxのログをデイリーでローテーションしつつs3に上げる

いろんなところから切貼。主に以下の本p181。
gihyo.jp

■AmazonLinux(EC2)で、サーバにS3アクセス可能ロールが付与されている場合

※以下はS3への十分なアクセス権ロールが付与されていることが前提。FullAccessとか・・・


/etc/logrotate.d/nginx を以下の様に。

/var/log/nginx/*.log {
    daily
    rotate 24
    compress
    missingok
    notifempty
    sharedscrits
    postrotate
        [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    endscript

    lastaction
        HOSTNAME=`hostname`
        filename=$1
        today=`date +"%Y%m%d"`
        echo "uploading ${filename}" > /var/log/logrotate.nginx
        for f in `ls -l ${filename}`; do
            upload_file="${f}-${today}.gz"
            aws s3 cp ${upload_file} s3://hogehoge-logs/${HOSTNAME}/`basename ${upload_file}` >> /var/log/logrotate.nginx 2>&1
        done
    endscript

}

■AmazonLinuxじゃない(EC2じゃない)CentOSでもやってみた

s3アクセスを許可したIAMアカウントを作成し、アクセスキー等を取得しておく

(手順省略)

AWS Cliをインストールする
yum install -y python-setuptools
easy_install pip
pip install awscli

# 確認
aws --version

# 作業ユーザのタブ補完有効化
vi ~/.bashrc

末尾に以下を追記

# for AWS Cli
complete -C /usr/bin/aws_completer aws

aws s3 [TAB]などで補完が効きます。

定義ファイル(credentials)の作成

aws configure
AWS Access Key ID [None]: <アクセスキー>
AWS Secret Access Key [None]: <シークレットアクセスキー>
Default region name [None]:<リージョン>
Default output format [None]:

→~/.aws/credentialsに上記内容が保存される。

# s3コマンド叩いてみる
aws s3 ls

# nginx のログローテーションに追記
事前にS3バケット:hogehoge-logs を作成しておく

vi /etc/logrotate.d/nginx

/var/log/nginx/*.log {
    daily
    rotate 24
    compress
    missingok
    notifempty
    sharedscrits
    postrotate
        [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    endscript

    lastaction
        export AWS_SHARED_CREDENTIALS_FILE=/root/.aws/credentials
        HOSTNAME=`hostname`
        filename=$1
        today=`date +"%Y%m%d"`
        echo "uploading ${filename}" > /var/log/logrotate.nginx
        for f in `ls -l ${filename}`; do
            upload_file="${f}-${today}.gz"
            aws s3 cp ${upload_file} s3://hogehoge-logs/${HOSTNAME}/`basename ${upload_file}` >> /var/log/logrotate.nginx 2>&1
        done
    endscript

}
上記との違いについて

> export AWS_SHARED_CREDENTIALS_FILE=/root/.aws/credentials
を追記し、credentialsの場所を明示的に指定してやっています。

S3からログ取得メモ

上記の様にしてS3に保存したログをまとめて取得したい

# 一覧確認
aws s3 ls s3://hogehoge-logs/server01/2017/

server01_log.20170201.tar.gz
server01_log.20170202.tar.gz
…
server01_log.20170228.tar.gz


# ログをまとめて取得

aws s3 cp s3://hogehoge-logs/server01/2017/ . --recursive --exclude "*" --include "*_log.201702*"

# ワイルドカードはそのまま使えない。このようにしてexcludeでいったん全部対象外とした後、includeで対象を指定する
# 参照:http://dev.classmethod.jp/cloud/aws/s3-logfile-copy-by-awscli/

以上。

【CentOS6】aipo_to_gcal(Aipoのカレンダーをgoogleカレンダーに同期するツール)のセットアップメモ

# 手順
# http://qiita.com/fantasista_21jp/items/4172f4062b44cbc004db

上記手順のままではCentOS6で動かなかった?ので自分の作業メモ。

# Google Developer Consoleでの設定等事前準備については上記手順書に従ってください。

# 設置先について:
# php55以降が必要とのこと。

php -v
# PHP 5.5.34 (cli) (built: Mar 31 2016 17:19:11)
# Copyright (c) 1997-2015 The PHP Group
# Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
→OK

# Composer導入前にphp.ini修正
cp /etc/php.ini /etc/php.ini.bak

vi /etc/php.ini
# -----timezoneを設定
date.timezone = "Asia/Tokyo"
# -----

# -----以下を下端に追加
detect_unicode = Off
# -----

# 同期ツール(aipo_to_gcal)のソースをgitから取得

以下hogehogeユーザで作業
cd ~
git clone https://github.com/fantasista21jp/aipo_to_gcal.git
# remote: Counting objects: 48, done.
# remote: Compressing objects: 100% (23/23), done.
# remote: Total 48 (delta 24), reused 46 (delta 24), pack-reused 0
# Unpacking objects: 100% (48/48), done.

# Composer用意

cd aipo_to_gcal
curl -s http://getcomposer.org/installer | php
# All settings correct for using Composer
# Downloading 1.0.0...
# 
# Composer successfully installed to: /home/hogehoge/composer.phar
# Use it: php composer.phar

php composer.phar install
# Loading composer repositories with package information
# Updating dependencies (including require-dev)
#   - Installing google/apiclient (1.1.2)
#     Downloading: 100%
# 
#   - Installing react/promise (v2.2.0)
#     Downloading: 100%
# 
#   - Installing guzzlehttp/streams (3.0.0)
#     Downloading: 100%
# 
#   - Installing guzzlehttp/ringphp (1.0.5)
#     Downloading: 100%
# 
#   - Installing guzzlehttp/guzzle (5.1.0)
#     Downloading: 100%
# 
#   - Installing kigkonsult/icalcreator (dev-master ae7c760)
#     Cloning 省略
# 
# Writing lock file
# Generating autoload files

# p12証明書を配置
/home/hogehoge/aipo_to_gcal/hogehoge.p12


# configsファイル作成
vi configs.php

<?php
// =========================================================
// Settings
// =========================================================
$clientId = 'hogehoge';
$authEmail = 'hogehoge@gserviceaccount.com';
$p12Key = '/home/hogehoge/aipo_to_gcal/hogehoge.p12';
$targetCalendar = 'hogehoge-schedule';
$aipoUser = 'hogehoge';
$aipoPasswd = 'fugafuga';
$aipoIcalUrl = 'https://hogehoge.jp/ical/calendar.ics';
// =========================================================

# テスト実行
php /home/hogehoge/aipo_to_gcal/upload.php

# 追加して実行
php /home/hogehoge/aipo_to_gcal/upload.php
# [Insert Event]:同期のテストです (2016-04-16T13:00:00+09:00)

# 削除して実行
php /home/hogehoge/aipo_to_gcal/upload.php
# [Delete Event]:同期のテストです (2016-04-16T13:00:00+09:00)

→該当のGoogleカレンダーに同期されたことを確認。OK

# hogehogeのcrontabに設置
# 5分おきに実行

## aipo_to_gcal for hogehoge
*/5 * * * * /usr/bin/php /home/hogehoge/aipo_to_gcal/upload.php

以上