tkm_71のブログ

自分のための備考録みたいなものです。

Mac(El Captitan) にPython3系を入れてみた

今回はMacに、Python3系を入れようとしたので、その備考録。
Macには元々、Python2.7が入っていたけど、それも共存させながら切り替えて使用できるっぽいので、それを試してみました。

環境

  • Mac (OS X El Capitan 10.11.4)
  • HomeBrewが使える

pyenvの導入

pythonのバージョンを管理するために導入する。
HomeBrewで一発。

$ brew install pyenv

Macにパスを設定

参考[1]より丸っとコピペさせてもらいました。

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

Pythonのインストール

今回は「Python 3.5.0a4」を入れてみようかと。

$ pyenv install --list        //とりあえず何があるか確認する
$ pyenv install 3.5.0a4

ここでエラー

以下のようなエラーが出た。

Downloading Python-3.5.0a4.tgz...
-> https://www.python.org/ftp/python/3.5.0/Python-3.5.0a4.tgz
Installing Python-3.5.0a4...
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

Please consult to the Wiki page to fix the problem.
https://github.com/yyuu/pyenv/wiki/Common-build-problems


BUILD FAILED (OS X 10.11.4 using python-build 20141028)

Inspect or clean up the working tree at /var/folders/89/bc34h7h57g993dw_17pryfb00000gn/T/python-build.20160504030211.19754
Results logged to /var/folders/89/bc34h7h57g993dw_17pryfb00000gn/T/python-build.20160504030211.19754.log

Last 10 log lines:
(cd /Users/takuma/.pyenv/versions/3.5.0a4/share/man/man1; ln -s python3.5.1 python3.1)
if test "xupgrade" != "xno"  ; then \
		case upgrade in \
			upgrade) ensurepip="--upgrade" ;; \
			install|*) ensurepip="" ;; \
		esac; \
		 ./python.exe -E -m ensurepip \
			$ensurepip --root=/ ; \
	fi
Ignoring ensurepip failure: pip 6.1.1 requires SSL/TLS

解決法を検索

ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?」でググッて、以下を実行

$ xcode-select --install

CFLAGS="-I$(brew --prefix openssl)/include" \
LDFLAGS="-L$(brew --prefix openssl)/lib" \
pyenv install -v 3.5.0a4

CFLAGS=-I/usr/include/openssl \
LDFLAGS=-L/usr/lib64 \
pyenv install -v 3.5.0a4

効果なし…
以上のことをやってみても、エラーは解消しなかった。

今回の解決法

今回は以下の方法で、無事にPython 3.5.1を入れることができました。

pyenvのアップデート

pyenvのバージョンを調べてみたところ「pyenv-20150404」が私のには入っているようでした。
しょうがないので、最新版を入れてみることに。

brewのアップデート

pyenvのバージョンを最新にするために、brewをアップデートしてみた。
方法は以下。

$ brew update

但し、ここで以下のようなエラーが出てしまった場合は

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- mach (LoadError)
	from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
	from /usr/local/Library/Homebrew/extend/pathname.rb:2:in `<top (required)>'
	from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
	from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
	from /usr/local/Library/Homebrew/global.rb:3:in `<top (required)>'
	from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
	from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
	from /usr/local/Library/brew.rb:15:in `<main>'

たぶん、このままではbrewコマンドが一切使えない気がするので、以下を実行。

//一旦brewのディレクトリを元に戻す
$ cd /usr/local
$ git reset --hard && git clean -df

$ sudo chown -R $(whoami):admin /usr/local
brew update

これでbrewが最新にアップデートできた。

$ brew --version
Homebrew 0.9.9 (git revision f653c; last commit 2016-05-04)

このあと、pyenvを最新にするために以下を。

$ brew install pyenv
Error: pyenv-20150404 already installed
To install this version, first `brew unlink pyenv`

$ brew unlink pyenv
Unlinking /usr/local/Cellar/pyenv/20150404... 5 symlinks removed

$brew install pyenv

これでpyenvが最新になった。

$ pyenv --version
pyenv 20160422

あとはこの状態で下を実行すると、「pyenv-20150404」ではでてこなかった、「python 3.5.1」が出てきた。

//インストールできるリストを確認
$ pyenv install --list

//インストールしてみる
$ pyenv install 3.5.1

以上でpython3.5.1を入れることができました。




Pythonを3.5.1に切り替える

インストールだけでは以下のようになっている.

$ pyenv versions
* system (set by /Users/takuma/.pyenv/version)
  3.5.1

Python3系に切り替えてみる。

$ pyenv global 3.5.1
$ pyenv rehash

確認。

$ pyenv versions
  system
* 3.5.1 (set by /Users/takuma/.pyenv/version)

$ python --version
Python 3.5.1

長くなったけど、これでPython3.5.1のインストールができて使用できる状態になりました。

Twitterに自分のサイトがスパム判定されてしまいました…

タイトルの通りですが…

ConoHaでサーバをレンタルして、一日。
Nodejsで作ったTwitter連携アプリをwebに公開してみよう!と意気込んで、初レンタル鯖を手に入れ
ついにアプリ公開だ!!ってテンション高めで作業をしていたら、自分のVPS上で起動しているアプリケーションで
Twitteroauth認証ページに飛ぼうとすると、以下のようなエラーが…

Error: The given URL is considered malware

さすがに英語できない僕でも理解できました…Twitterマルウェアだと見なされた?!って。。。

とりあえず検索かけると、どうやらTwitterに間違ってスパム判定されてしまいました〜解除してください!って連絡すればいいとのこと。

全くめんどくさいことをしてくれますよ…

しょうがないので、以下の説明を読み、

Unsafe links on Twitter | Twitter Help Center
f:id:tkm_71:20160322184955p:plain

文章内の「こちら」をクリックし

以下の二番目「Twitterがスパムと判断したため、リンクをツイートできません。」にチェックを入れて、チケットの作成をしました。
f:id:tkm_71:20160322185041p:plain

すると、少ししてから登録したメールアドレス宛てに、以下の様なメール。
f:id:tkm_71:20160322185137p:plain

不自然な日本語だけど、「Twitterでは安全性を高めるために、自動でスパムっぽいサイトを検出して、ツイートできないようにしてるよ。とりあえず報告してもらった、サイトはあとで内容チェックして対応するね!」みたいな感じらしい。

これで、スパムじゃないと判定されればきっと解除されるはずだ。

はたして、ここからどれくらい待てばスパムじゃないと判断されて解除されるのだろうか…もしくはやっぱりこれスパム!!って判定されて解除されないとか??

まあ待つしかないですかね。

ちなみに、自分の場合はOauthの認証ページに飛べなくて気がついたけど、自分のサイトのURLをツイートしようとすると、エラーがでてツイートできなくなってましたね…

めんどくさいけど、まあしょうがないです。

きっと、デバッグ中にアクセスしすぎたのが原因ですかね。

もっとしっかり、ローカルでデバッグするようにすればよかったと反省。

追記 (2016/03/26)

スパム判定が解除されました

結論から言うとスパム判定は解除されていまでは、通常どおりにURLをTwitterにツイートすることもできるようになりました。

ただ、この記事の追記以前に書いた方法は何やら必要なかったようです。

原因はspamhaus.orgにスパムリスト登録されてしまっていた

The Spamhaus Projectというのは「ワールドワイドのスパム対策で非常に評判の高いブロックリスト」らしい。
(ここより引用 => Spamhausとは - はてなキーワード

ようするに、今回はこいつに自分のドメインがスパムとして、リストに登録されていたのが原因のようだ。
そのため、Twitter側にいくら報告しても何の返事もないし解決しないわけです。

とりあえず今回スパム判定されてしまっていたのを、どう解決したか順番に書きます。
所要時間は作業で10分、解除待ちで30分くらいでしょうかね。

step.1 spamhaus.orgに自分のドメインがリスト登録されているか調べる

https://www.spamhaus.org/query/domain/sample.com」のように、自分のドメインを入力してアクセス。
そして以下のように「sample.com is listed in the DBL」となっていたら、きっとスパムリストに入れられている、くそめ!

f:id:tkm_71:20160326180504p:plain

step.2 リストから削除してくださいとお願いします

step1で、自分のドメインをクリックすると、以下のような画面になるので、「DBL removal form」をクリック
f:id:tkm_71:20160326180533p:plain

step.3 ファームにメールアドレスなどを入力して、解除してくれ申請します

とりあえずフォームに必要事項書いて、送信します。
※メールアドレスはgmailなどのフリーのやつはダメらしい。しょうがないので、ezweb.ne.jpのものを使用した。

step.4 入力したメールアドレスに送られてきたメールをチェック

入力したメールアドレスにメールが届くので中身を確認し、中身に記載されているURLを踏むと、解除完了。
以下のような画面が出ればOKだとおもわれ。

f:id:tkm_71:20160326180911p:plain

step.5 休憩

step4までできっとスパムリストからの解除ができているが、すぐには反映されないためちょっとの間休憩しましょう。
自分の場合は、20分ほど放置してソシャゲ(クラロワを数戦)していたら、Twitterに自分のドメインでURLを書き込めるし、連携アプリケーションのログイン(oauth認証)も通るようになっていた。

一件落着である。


終わりに

長かった…初めTwitterのヘルプセンターに連絡していたが、そっちではなくspamhaus側で対応しなくてはいけなかったらしい。ここに気が付かなければTwitterヘルプセンターから連絡こないな〜とより無駄な時間を過ごしていただろう。
はぁー、Twitterがspamhausなるものを利用していることを知らなかった。外部のスパムリストを利用してスパムからユーザを保護しようとしているのですね。いやー本当に、サーバ借りて初日でスパム登録されるからびっくりしちゃいました。


参考

とりあえず今回この記事によって全てが解決したので、本当にありがとうございました、と言いたいです。

[1] ドメインがスパムリストに登録されてしまいTwitterと連携できなくなった時の対処法 - Qiita

CentOS7で自動起動設定を行う

centOS6までは、mongoDBやnginxなどをOS起動時に自動で起動するようにするには「chkconfig」を利用していたようですが、
centOS7から「systemctl」になった模様。

CentOS6までは
$ sudo chkconfig mongod on
CentOS7
//自動起動を設定
$ systemctl enable nginx.service
//自動起動を解除
$ systemctl disable nginx.service

らしいです。

※よくわからないけど、CentOS7でもmongoDBは以下でできた。

chkconfig  mongod  on

全部が全部、systemctlってわけではないのかなー

centos 7 + nginx + nodejsのnginxの設定メモ

nginxの設定を以下にメモ。

設定ファイルの作成

/etc/nginx/conf.d/default.confを同じ階層にコピーして、sample.confみたいにする。

/etc/nginx/conf.d/sample.conf

upstream node-sampleapp {
    server localhost:3000;
}

server {
    listen       80;
    server_name  www.aaa.bbb.ccc;

    charset utf-8;
    access_log /var/log/nginx/access-nodeApp.log main;
    error_log /var/log/nginx/error-nodeApp.log;

    proxy_redirect      off;
    proxy_set_header Host                   $host;
    proxy_set_header X-Real-IP              $remote_addr;
    proxy_set_header X-Forwarded-Host       $host;
    proxy_set_header X-Forwarded-Server     $host;
    proxy_set_header X-Forwarded-For        $proxy_add_x_forwarded_for;

    location / {
         proxy_pass http://node-sampleapp/;
    }


    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

これで、www.aaa.bbb.cccにアクセスするだけで、www.aaa.bbb.ccc:3000などを指定する必要がなくなる!

注意
//これは☓
proxy_pass node-sampleapp/;

//これでOK
proxy_pass http://node-sampleapp/;

ここを気をつけないと以下のエラーがでてしまうようだ。しっかり、「http://」を付けましょう。

nginx: [emerg] invalid URL prefix in /etc/nginx/conf.d/node-app.conf:21
nginx: configuration file /etc/nginx/nginx.conf test failed

CentOS 7 にemacs24.3をインストール

以下を参考に行いました
[1]CentOS 6.4 に Emacs 24.3 をインストールする | Jaxx2104.info

こちらも簡単に利用したコマンドのみメモ

事前準備

sudo yum -y install gcc make ncurses-devel

emacs24.3を入れる

//ダウンロード(バージョンは適宜設定)
$ wget http://ftp.jaist.ac.jp/pub/GNU/emacs/emacs-24.3.tar.gz

//解答
$ tar xvf emacs-24.3.tar.gz

//移動
$ cd emacs-24.3

//makeするために
$ ./configure

//makeします!
$ make
$ sudo make install

これで使えました。

元からemacs23などが入っている場合は、プロファイルの設定が必要かもしれないです。

Linuxでディレクトリ以下のgrep

メモ

$ grep -r "search-word" ディレクトリ

ex : カレントディレクトリ以下で「hoge」を含む行
$ grep -r "hoge" ./

Emacsでsudoをして、ファイルを開く

$ sudo emacs test.txt

とすると、怒られた。

とりあえず以下で対応

//emacsを開いてから、Ctrl + Fでファイルを開こうとする.
//そして、ファイルのパスをいれるミニバッファが開くので
Find file: /sudo::/etc/.../.../test.txt

パスワードを聞かれるので、sudoするときに使うパスワードぶち込んでsudoで開けた。

簡単に書くと
「/sudo::「ファイルパス」」

これで書き込み権限ないって言われるやつも編集できそう。

参考
tramp - Emacsでsudoしつつファイルを開く方法 · DQNEO起業日記