人生リアルタイムアタック

当面はPython学習帳

gemをソースから自分でbuildする

ちょっと必要になったので、備忘録を兼ねて。

  1. gemリポジトリをローカルに持ってくる
  2. gem build *.gemspec
  3. gem install *-<version>.gem

CentOS6にsquidでプロキシサーバを立てる

はじめに

海外に居るため、一部国内のコンテンツが見れない。
さくらVPSに外部プロキシサーバを立てて、国内コンテンツを普通に見たい。

PC ---- ルータ ---- プロキシサーバ(さくらVPS) ---- Webサーバ

インストール

$ sudo yum install squid

…

=============================================================================================================
 パッケージ                アーキテクチャ      バージョン                         リポジトリー          容量
=============================================================================================================
インストールしています:
 squid                     x86_64              7:3.1.23-16.el6_8.4                updates              1.8 M
依存性関連でのインストールをします。:
 libtool-ltdl              x86_64              2.2.6-15.5.el6                     base                  44 k

トランザクションの要約
=============================================================================================================
インストール         2 パッケージ

総ダウンロード容量: 1.9 M
インストール済み容量: 6.4 M
これでいいですか? [y/N]y
パッケージをダウンロードしています:
(1/2): libtool-ltdl-2.2.6-15.5.el6.x86_64.rpm                                         |  44 kB     00:00
(2/2): squid-3.1.23-16.el6_8.4.x86_64.rpm                                             | 1.8 MB     00:00
-------------------------------------------------------------------------------------------------------------
合計                                                                         3.7 MB/s | 1.9 MB     00:00

2016/06/02現在、squid : Optimising Web Delivery によると最新は3.5.19とのことなので若干古い。

squid.confの設定

/etc/squid/squid.conf を編集する。

ルータからのアクセスを許可する為、自宅のIPアドレスを調べ許可IPアドレスとして登録する。 確認には先達に従い、 確認くん を使う。

# 元々あるhttp_access deny allの上に追記すること。
acl indoor src xxx.xxx.xxx.xxx/32
http_access allow indoor
http_access deny all

ポート番号はデフォルトから別の番号に変更する。 12345 は例なので適宜お好みで。

# Squid normally listens to port 3128
#http_port 3128
http_port 12345

プロキシサーバ経由であることを隠蔽する為、以下のオプションをファイル末尾に追記する。

# ローカルのIPアドレスを隠蔽
forwarded_for off

# リクエストヘッダのプロキシ情報を隠蔽
header_access X-Forwarded-For deny all
header_access Via deny all
header_access Cache-Control deny all

設定が完了したら、後はいつものコマンド。

# squid起動
$ sudo /etc/init.d/squid start

# 自動起動設定
$ sudo chkconfig squid on

squidのバージョンによっては startコマンド実行時にWarningが出るので適宜修正を行う。3系であれば上記設定でほぼ問題ないハズ。

iptablesの設定

iptablesによるポート制限も変更を行う。

:FWINPUT - [0:0]
-A INPUT -j FWINPUT
-A FORWARD -j FWINPUT
-A FWINPUT -i lo -j ACCEPT
-A FWINPUT -p icmp --icmp-type any -j ACCEPT
-A FWINPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FWINPUT -p tcp -m tcp --dport 12345 -s xxx.xxx.xxx.xxx -j ACCEPT
-A FWINPUT -j REJECT --reject-with icmp-host-prohibited

変更完了したらiptables再読み込み。

$ sudo iptables-restore < /etc/sysconfig/iptables

(任意)アカウントによるログイン制御

第三者の不正利用を防ぐ為にアカウントによるログイン制御を行うこともできる。認証方法は多数用意されているが、Basic認証と同じ仕組みがシンプルそう... と思ったが、nginxしか使ってないのでプロキシ専用のパスワードファイルを用意する。

# パスワード生成
$ sudo htpasswd -c /etc/squid/squid-passwd <user_name>
New password:
Re-type new password:
Adding password for user <user-name>

htpasswd コマンドが利用できない場合には、httpd-toolsをインストールすると良い。

$ sudo yum install httpd-tools

squid-passwdファイルを作成したら、squid.confに設定を追加する。
ただし記述順序に注意。http_accessは上から順に評価される。
先述のIPアドレス指定の後に設定を追加すると、自宅ではパスワードが不要、自宅外ではパスワード認証と使い分けることができる。

if IPアドレスが自宅:
  接続
elif BASIC認証OK:
  接続
else:
  接続不可
$ sudo vi /etc/squid/squid.conf

# 元々の自宅用設定
http_access allow indoor

# ここに自宅外設定を追加。
auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/squid-passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

acl outdoor proxy_auth REQUIRED
http_access allow outdoor

# 元々の deny all 設定
http_access deny all

OS Xのプロキシ設定

システム環境設定 > ネットワーク > 詳細 > プロキシ にて、HTTPとHTTPSの設定を行うだけでよい。

f:id:ShineSpark:20160602195952p:plain

設定が完了したら、ブラウザから改めて 確認くん にアクセスし、IPアドレスがさくらVPSのものに変わっていることを確認する。

もしくは sudo tail -f /var/log/squid/access.log してlogを眺めてみる。

参考

sedとxargsを併用して纏めてyum removeする

事の始まり

OS X環境で使っていたVim設定を使いまわそうとして、cpsm.vimの為にBoost関連のパッケージをインストールしたけど、滅多にCentOS環境では使わないからやっぱりremoveしたい。

今回の削除対象のみなさん。

今日纏めて入れちゃったパッケージの方々。| とxargsを上手く使いこなして一発で消したい。

$ yum list installed | grep boost
boost-date-time.x86_64             1.41.0-28.el6                     @base
boost-filesystem.x86_64            1.41.0-28.el6                     @base
boost-graph.x86_64                 1.41.0-28.el6                     @base
boost-iostreams.x86_64             1.41.0-28.el6                     @base
boost-program-options.x86_64       1.41.0-28.el6                     @base
boost-python.x86_64                1.41.0-28.el6                     @base
boost-regex.x86_64                 1.41.0-28.el6                     @base
boost-serialization.x86_64         1.41.0-28.el6                     @base
boost-signals.x86_64               1.41.0-28.el6                     @base
boost-system.x86_64                1.41.0-28.el6                     @base

sedで余計な部分を消す

sed自体は以前利用経験があるし、Vimでも利用しているので特に困らずこんな感じに削除する

$ sudo yum list installed | grep boost | sed -e 's/\ .*//'
boost-date-time.x86_64
boost-filesystem.x86_64
boost-graph.x86_64
boost-iostreams.x86_64
boost-program-options.x86_64
boost-python.x86_64
boost-regex.x86_64
boost-serialization.x86_64
boost-signals.x86_64
boost-system.x86_64
boost-test.x86_64
boost-thread.x86_64
boost-wave.x86_64

問題なさそう。

xargsに渡す

$ sudo yum list installed | grep boost | sed -e 's/\ .*//' | xargs -t sudo yum -y remove
sudo yum -y remove boost-date-time.x86_64 boost-filesystem.x86_64 boost-graph.x86_64 boost-iostreams.x86_64 boost-program-options.x86_64 boost-python.x86_64 boost-regex.x86_64 boost-serialization.x86_64 boost-signals.x86_64 boost-system.x86_64 boost-test.x86_64 boost-thread.x86_64 boost-wave.x86_64
読み込んだプラグイン:fastestmirror, security
削除処理の設定をしています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package boost-date-time.x86_64 0:1.41.0-28.el6 will be 削除
---> Package boost-filesystem.x86_64 0:1.41.0-28.el6 will be 削除
---> Package boost-graph.x86_64 0:1.41.0-28.el6 will be 削除
---> Package boost-iostreams.x86_64 0:1.41.0-28.el6 will be 削除
---> Package boost-program-options.x86_64 0:1.41.0-28.el6 will be 削除
---> Package boost-python.x86_64 0:1.41.0-28.el6 will be 削除
---> Package boost-regex.x86_64 0:1.41.0-28.el6 will be 削除
---> Package boost-serialization.x86_64 0:1.41.0-28.el6 will be 削除
---> Package boost-signals.x86_64 0:1.41.0-28.el6 will be 削除
---> Package boost-system.x86_64 0:1.41.0-28.el6 will be 削除
---> Package boost-test.x86_64 0:1.41.0-28.el6 will be 削除
---> Package boost-thread.x86_64 0:1.41.0-28.el6 will be 削除
---> Package boost-wave.x86_64 0:1.41.0-28.el6 will be 削除
--> 依存性解決を終了しました。

依存性を解決しました

=============================================================================================================
 パッケージ                         アーキテクチャ      バージョン                  リポジトリー        容量
=============================================================================================================
削除:
 boost-date-time                    x86_64              1.41.0-28.el6               @base              149 k
 boost-filesystem                   x86_64              1.41.0-28.el6               @base              172 k
 boost-graph                        x86_64              1.41.0-28.el6               @base              338 k
 boost-iostreams                    x86_64              1.41.0-28.el6               @base              114 k
 boost-program-options              x86_64              1.41.0-28.el6               @base              615 k
 boost-python                       x86_64              1.41.0-28.el6               @base              649 k
 boost-regex                        x86_64              1.41.0-28.el6               @base              1.9 M
 boost-serialization                x86_64              1.41.0-28.el6               @base              1.5 M
 boost-signals                      x86_64              1.41.0-28.el6               @base              154 k
 boost-system                       x86_64              1.41.0-28.el6               @base               24 k
 boost-test                         x86_64              1.41.0-28.el6               @base              1.6 M
 boost-thread                       x86_64              1.41.0-28.el6               @base               84 k
 boost-wave                         x86_64              1.41.0-28.el6               @base              1.2 M

トランザクションの要約
=============================================================================================================
削除                13 パッケージ

インストール済み容量: 8.5 M
パッケージをダウンロードしています:
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  削除中                  : boost-wave-1.41.0-28.el6.x86_64                                             1/13
  削除中                  : boost-filesystem-1.41.0-28.el6.x86_64                                       2/13
  削除中                  : boost-graph-1.41.0-28.el6.x86_64                                            3/13
  削除中                  : boost-regex-1.41.0-28.el6.x86_64                                            4/13
  削除中                  : boost-system-1.41.0-28.el6.x86_64                                           5/13
  削除中                  : boost-date-time-1.41.0-28.el6.x86_64                                        6/13
  削除中                  : boost-thread-1.41.0-28.el6.x86_64                                           7/13
  削除中                  : boost-program-options-1.41.0-28.el6.x86_64                                  8/13
  削除中                  : boost-serialization-1.41.0-28.el6.x86_64                                    9/13
  削除中                  : boost-signals-1.41.0-28.el6.x86_64                                         10/13
  削除中                  : boost-iostreams-1.41.0-28.el6.x86_64                                       11/13
  削除中                  : boost-test-1.41.0-28.el6.x86_64                                            12/13
  削除中                  : boost-python-1.41.0-28.el6.x86_64                                          13/13
  Verifying               : boost-python-1.41.0-28.el6.x86_64                                           1/13
  Verifying               : boost-date-time-1.41.0-28.el6.x86_64                                        2/13
  Verifying               : boost-test-1.41.0-28.el6.x86_64                                             3/13
  Verifying               : boost-iostreams-1.41.0-28.el6.x86_64                                        4/13
  Verifying               : boost-filesystem-1.41.0-28.el6.x86_64                                       5/13
  Verifying               : boost-regex-1.41.0-28.el6.x86_64                                            6/13
  Verifying               : boost-system-1.41.0-28.el6.x86_64                                           7/13
  Verifying               : boost-signals-1.41.0-28.el6.x86_64                                          8/13
  Verifying               : boost-serialization-1.41.0-28.el6.x86_64                                    9/13
  Verifying               : boost-wave-1.41.0-28.el6.x86_64                                            10/13
  Verifying               : boost-thread-1.41.0-28.el6.x86_64                                          11/13
  Verifying               : boost-graph-1.41.0-28.el6.x86_64                                           12/13
  Verifying               : boost-program-options-1.41.0-28.el6.x86_64                                 13/13

削除しました:
  boost-date-time.x86_64 0:1.41.0-28.el6                 boost-filesystem.x86_64 0:1.41.0-28.el6
  boost-graph.x86_64 0:1.41.0-28.el6                     boost-iostreams.x86_64 0:1.41.0-28.el6
  boost-program-options.x86_64 0:1.41.0-28.el6           boost-python.x86_64 0:1.41.0-28.el6
  boost-regex.x86_64 0:1.41.0-28.el6                     boost-serialization.x86_64 0:1.41.0-28.el6
  boost-signals.x86_64 0:1.41.0-28.el6                   boost-system.x86_64 0:1.41.0-28.el6
  boost-test.x86_64 0:1.41.0-28.el6                      boost-thread.x86_64 0:1.41.0-28.el6
  boost-wave.x86_64 0:1.41.0-28.el6

完了しました!

メモ

xargs -tでxargs実行時のコマンドを標準出力に出力できる。
xargs -n 1 でxargsに渡される引数の数を指定できる。cpする時は-n 2 などを使うことになるだろう。

英語上達の鉄板、みるみる英語力がアップする音読パッケージ・どんどん話すための瞬間英作文トレーニングは遠慮なくKindle版を買ってよい。

Amazon.co.jpでどんどん話すための瞬間英作文トレーニングのKindle版を購入しようとしたら、CD無しバージョンといわれてウッ…ってなった。

どんどん話すための瞬間英作文トレーニング (CD BOOK)

どんどん話すための瞬間英作文トレーニング (CD BOOK)

音声付き前提の書籍なのにCD無しでどないしよーと思ってたけど、実はベレ出版が公式mp3(各216円)販売を行っているので気にせずKindle版を購入して問題ない。

ベレ出版音声ダウンロードストア / どんどん話すための瞬間英作文トレーニング 付属音声1

この記事執筆時点で、 Kindle版1,080円, 単行本1,944円。なので、2種類あるmp3データを買ってもKindle版の方が1,512円で済むので安い。
CDから取り込む手間もない分こちらの方がありがたい。

同様に、同じく著名なみるみる英語力がアップする音読パッケージトレーニングも、Kindle版の方がiPhoneでもKindleでも閲覧可能なことからKindle版の方が便利です。
私は書籍で購入してましたが、自炊したPDFよりKindleの方が便利な為、結局Kindle版も買い直しました。

みるみる英語力がアップする音読パッケージトレーニング(CD BOOK)

みるみる英語力がアップする音読パッケージトレーニング(CD BOOK)

というわけで遠慮なくKindle版を買いましょう。

El CapitanのPreviewでKindle用にイイカンジにPDF圧縮する

手持ちの自炊したPDFや、PDF購入した電子書籍Kindle Paperwhiteでも読みたいのでイイカンジ圧縮したい。

しかし、Previewのファイルサイズ圧縮は低解像度過ぎる。
ということで、従来はColorSync Utilityで新しいフィルターを追加するというやり方があったが、El Capitanだと新規に追加したフィルターがPreviewで選択できず、選択可能にするにはCLIでsudoしたりしないといけない。

で、GUI操作の為にTerminal使うのはちょっと違うなと思ったので、標準アプリケーションのみでGUI操作で完結する方法を模索。

環境

  • Kindle Paperwhite 第7世代(2015年以降のモデル, 300ppi, 1,072×1,448)
  • OS X El Capitan
  • Kindleパーソナルドキュメントは50MBまでだけど、Gmailは25MBまでだから実質25MBに圧縮しないといけない人。

解決策

Automatorを使う。

手順

1. ColorSync UtilityでKindle用のフィルタを追加する

元々あるフィルタ'Reduce File Size'を複製し、Kindle用のフィルタを作成する。
今回は'for Kindle'という名前にした。

Web上の情報から、 Image Sampling > Max の値を元の512pxより大きくするとより解像度が上がることが分かっていたので、今回はKindle Paperwhiteの横解像度と同じ1072pxに指定したフィルタを作成した。 f:id:ShineSpark:20160527165453p:plain

2. Automatorアプリケーションを作成する

Kindle用のフィルタをPreview上で利用可能にするにはuser以下のlibralyディレクトリのフィルタを/System/Library/Filters/に移動させる必要があるのでめんどい。カンタンにAutomatorアプリケーションを作成する。

まず、Automatorを立ち上げる。Spotlight便利。

f:id:ShineSpark:20160527171207p:plain

新規にアプリケーションを選択する。

f:id:ShineSpark:20160527171241p:plain

アクションを登録していく。今回登録するアクションは以下の4つ。

  • Ask for Finder Items でどのファイルかを尋ねるようにする
  • Filter Finder Items で念の為PDFファイルのみに限定する
  • Copy Finder Items で元々のPDFファイルをデスクトップに複製する
  • Apply Quartz Filter to PDF Documents でコピーしたPDFファイルにフィルタを適用する

を行う。日本語でのアクション名はそれっぽいものを探してください。

f:id:ShineSpark:20160527171416p:plain

右上の 'Run' ボタンからテスト実行できるので、それで実際にどのように動作するのか確認しながら作るとよい。

上手く動作したらイイカンジの名前を付けて保存。

3. 使う。

アプリケーションとして保存したので、以後は作成したAutomatorアプリケーションを実行してPDF圧縮を行う。
イイカンジの名前を付けておくと、Spotlightから呼び出しやすい。

f:id:ShineSpark:20160527172407p:plain

上記すらだるい人

USBでKindleを繋いで同期しましょう。50MB越えてても大丈夫です。

Amazon.co.jp ヘルプ: USB経由でFireタブレットまたはKindle端末にパーソナル・ドキュメントを転送する

手持ちのPDF書籍の閲覧には多少工夫が入りますが、'本を読む' には軽さやバッテリー持ちの良さからiPadよりKindleの方が便利です。まだ買ってない人は買いましょう。

手頃な値段なので、ケースも保証も要らないです。壊れる頃には新世代のものが出てるので新しいのを買いましょう。 アダプタも他のUSBアダプタで代用できるので改めて買う必要はないです。

広告有無は1タップ減るので広告無し版を買いましょう。

Kindle Paperwhite Wi-Fi、ブラック

Kindle Paperwhite Wi-Fi、ブラック

参考

CentOSにDockerをインストールする

この記事内容は公式の

docs.docker.com

ままなので、英語が読める人は公式のドキュメントに従いましょう。

Dockerのインストール

元々のyum repoは古いので、Dockerのyum repoを追加する

# 一度yumの更新
$ sudo yum update 

# docker.repoの追加
$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

# docker-engineのインストール
$ sudo yum install docker-engine

# dockerの起動
$sudo service docker start

# テスト起動
$ sudo docker run hello-world
sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from hello-world
d59cd4c39e50: Pull complete
f1d956dc5945: Pull complete
Digest: sha256:4f32210e234b4ad5cac92efacc0a3d602b02476c754f13d517e1ada048e5a8ba
Status: Downloaded newer image for hello-world:latest

Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

OK.

docker グループを作る

DockerデーモンはTCPポート代替として機能するUnixソケットに紐付いており、そのUnixソケットはデフォルトでrootがオーナーになっている為、Dockerはrootかsudoでしか動作しない。
ということで、docker グループを作ってそこにユーザを追加する。

この docker グループはDockerに於いてrootユーザ同等の権限を持つ。
Docker Daemon Attack Surface と呼ばれるセキュリティ上の影響を考慮する必要がある。

Docker security

# dockerグループの作成
$ sudo groupadd docker

# dockerグループにuserを追加する
$ sudo usermod -aG docker your_username

一度ログアウトし、先述のyour_usernameでログインする。
念の為、sudoなしで起動できることを確認する。

$docker run hello-world

起動時にdocker daemon自動起動する

いつもの

$ sudo chkconfig docker on

Dockerのアンインストール

# インストールしているyumパッケージの確認
$ yum list installed | grep docker
docker-engine.x86_64  1.7.1-1.el6       @dockerrepo

# 該当パッケージを削除
$ sudo yum remove docker-engine.x86_64

# イメージとコンテナとボリュームの削除
$ rm -rf /var/lib/docker

参考

https://docs.docker.com/engine/installation/linux/centos/

CentOSからNode.js / npm をアンインストールする

CentOSのrootからやたらとnpmが古いぞとメールが来るのだけれども、そもそもnvm上のNode.js / npmしか利用していないのでグローバルのNode.js / npmはアンインストールすることにした。

しかし、Node.js / npmのアンインストール方法が公式にないぞ...ということでその記録。

Node.jsのアンインストール

ソースコードがある場合(未確認)

# cd <ソースコードのディレクトリ>
# make uninstall

上記で安全にアンインストール可能らしいのだが、生憎未確認。

ソースコードがない場合

ソースコードが手元に無かった為、こちらのやり方で実施した。
まずnodeのパスを確認し、それに基づいてbin, lib, manを削除するだけである。
念の為verboseオプションを付与している。

# where node
/usr/bin/node

# rm -rfv /usr/{bin/node,lib/node,share/man/*/node.*}

npm のアンインストール

アンインストールコマンドが用意されているのでそちらを利用する。

# npm uninstall npm -g
- abbrev@1.0.7 node_modules/npm/node_modules/abbrev
- ansi-regex@2.0.0 node_modules/npm/node_modules/ansi-regex
- ansicolors@0.3.2 node_modules/npm/node_modules/ansicolors
- ansistyles@0.1.3 node_modules/npm/node_modules/ansistyles
- aproba@1.0.1 node_modules/npm/node_modules/aproba
- archy@1.0.0 node_modules/npm/node_modules/archy
- chownr@1.0.1 node_modules/npm/node_modules/chownr
- clone@1.0.2 node_modules/npm/node_modules/columnify/node_modules/wcwidth/node_modules/defaults/node_modules/clone

...

- npm@3.9.2 node_modules/npm

ホームディレクトリに .npm/ が残っていたのでこれも削除

# rm -rf .npm

これでアンインストール完了。

参考