前回と同様にvagrantでUbuntu 14.04 LTS (ubuntu/trusty64) の仮想マシンを立ち上げてまっさらな状態からPythonをソースコードからインストールします。

1
$ sudo apt-get update
1
2
3
4
5
$ wget https://www.python.org/ftp/python/3.4.2/Python-3.4.2.tgz
$ tar xzf Python-3.4.2.tgz
$ cd Python-3.4.2
$ ./configure --prefix=/opt/python-3.4.2
$ make 2>&1 | tee make.log

apt-get updateだけしてビルド

特にパッケージを追加インストールしないでそのままビルドすると、こんな感じのモジュールがビルドされない。

1
2
3
4
_bz2                  _curses               _curses_panel
_dbm                  _gdbm                 _lzma
_sqlite3              _ssl                  _tkinter
readline              zlib

pyenvのwikiを参考にしてビルド

pyenvhttps://github.com/yyuu/pyenv/wiki/Common-build-problems で紹介されてる依存パッケージをインストールしてビルドしてみるとこんな感じ。

1
$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm
1
2
_curses            _curses_panel      _dbm
_gdbm              _lzma              _tkinter  

パーフェクトPythonを参考にしてビルド

パーフェクトPythonで紹介されていたパッケージをインストールしてビルドしてみるとこんな感じ。

1
$ sudo apt-get install -y libbz2-dev libreadline-dev libssl-dev libsqlite3-dev libgdbm-dev zlib1g-dev tk-dev tcl-dev
1
_curses               _curses_panel         _lzma  

上記+α

さらにliblzma-dev libncurses5-devを追加してビルドしてみるとひとまず全てのモジュールはビルドされている様子。

1
$ sudo apt-get install -y libbz2-dev libreadline-dev libssl-dev libsqlite3-dev libgdbm-dev zlib1g-dev tk-dev tcl-dev iblzma-dev libncurses5-dev

Python Developer’s Guideを参考に

Python Developer’s Guide https://docs.python.org/devguide/setup.html#compiling-for-debugging で紹介されているビルド方法はこんな感じ。

1
$ sudo apt-get build-dep python3.4

上記コマンドを実行すると一通りすべてのモジュールがビルドされた状態から追加でインストールされるパッケージは以下のようになってた。この中に気になるのがあればこちらのほうがやはりいいのかも。

1
2
3
4
5
6
7
The following NEW packages will be installed:
  autoconf blt blt-dev debhelper dh-apparmor diffstat docutils-common gettext
  intltool-debian libbluetooth-dev libbluetooth3 libcroco3 libdb-dev
  libdb5.3-dev libffi-dev libjs-sphinxdoc libjs-underscore libmpdec-dev
  libncursesw5-dev libunistring0 m4 po-debconf python-docutils python-jinja2
  python-markupsafe python-pygments python-roman python-sphinx quilt sharutils
  sphinx-common xvfb

ただpython3.4っていうパッケージがない場合は、バージョン下げたりしてパッケージ探してね、とあるのでスクリプト化を考えると若干使いづらいかも。

If that package is not available for your system, try reducing the minor version until you find a package that is available.

まとめ

依存パッケージをインストール

おそらく最小限なパッケージをインストールするか

1
$ sudo apt-get install libbz2-dev libreadline-dev libssl-dev libsqlite3-dev libgdbm-dev zlib1g-dev tk-dev tcl-dev iblzma-dev libncurses5-dev

build-depを利用して依存パッケージをインストールする

1
$ sudo apt-get build-dep python3.4

ソースコードをダウンロードしてビルド

1
2
3
4
5
6
$ wget https://www.python.org/ftp/python/3.4.2/Python-3.4.2.tgz
$ tar xzf Python-3.4.2.tgz
$ cd Python-3.4.2
$ ./configure --prefix=/opt/python-3.4.2
$ make 2>&1 | tee make.log
$ sudo make install 2>&1 | tee make_install.log

普段使いのMacではとりあえずでpyenvを導入していて、 Pythonの仮想環境の構築の仕方についてあやふやだったので 確認がてら新しく環境を作ってみた。 vagrantでUbuntu 14.04 LTSの仮想マシンを作成して実施。

Pythonバージョン別の仮想環境の構築方法とpipのインストール有無は以下の感じ。 3.3からvenvが導入されたのと3.4からensurepipが導入されて pipがインストールされるようになってるはず。

Python tool pip
2.7 virtualenv 入ってる
3.3 pyvenv 入ってない
3.4 pyvenv 入ってる

Ubuntu 14.04 LTS に付属しているPython3.4.0を使ってみる

3.4からは標準で仮想環境も作れるしpipも最初からインストールされてるしで便利なんだろうなーっと…

1
2
$ pyvenv-3.4 env34
Error: Command '['/home/vagrant/env/env34/bin/python3.4', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1

うーん? ensurepipのscript実行でエラーの模様。

1
2
$ python3.4 -Im ensurepip --upgrade --default-pip
/usr/bin/python3.4: No module named ensurepip

そんなモジュールないよとのこと。どうやらpython3パッケージ3.4.0-0ubuntu2にはensurepipが入ってないようで。

1
$ python3.4 -m venv env34 --without-pip  

pipなしなら仮想環境作れるけどせっかくならpipは最初から入って欲しい。

ソースコードからビルドしてみる

公式パッケージリポジトリには2系と3系の二つしか入手できないので ソースコードからビルドしてみる。せっかくなので現時点の最新で。

1
2
3
4
5
6
7
$ cd
$ wget https://www.python.org/ftp/python/3.4.2/Python-3.4.2.tgz
$ tar xzf Python-3.4.2.tgz
$ cd Python-3.4.2
$ ./configure --prefix=/opt/python-3.4.2
$ make 2>&1 | tee make.log
$ sudo make install 2>&1 | tee make_install.log

システムとは別の場所にインストールしておいて、仮想環境作成すると

1
$ /opt/python-3.4.2/bin/pyvenv-3.4 env342

うまくいったような感じがするけど

1
2
3
4
$ source env342/bin/activate
(env342) $ pip
The program 'pip' is currently not installed. To run 'pip' please ask your administrator to install the package 'python-pip'
(env342) $ deactivate

pipなんてないって言われちゃってますよと。

足りてないパッケージをインストールする

makeのログを見てみると最後のほうでなんか言われてますね

1
2
3
4
5
6
7
8
9
...
Python build finished successfully!
The necessary bits to build these optional modules were not found:
_bz2                  _curses               _curses_panel
_dbm                  _gdbm                 _lzma
_sqlite3              _ssl                  _tkinter
readline              zlib
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
...

それっぽいパッケージをインストールして

1
$ sudo apt-get install libbz2-dev libgdbm-dev liblzma-dev libsqlite3-dev libssl-dev libreadline-dev libncurses5-dev tk-dev

再度makeして再インストール

1
2
3
4
5
$ rm -rf /opt/python-3.4.2
$ cd ~/Python-3.4.2
$ sudo make clean
$ make 2>&1 | tee make.log
$ sudo make install 2>&1 | tee make_install.log

ログにはpipがインストールされた旨のメッセージが表示された。

1
2
3
4
...
Installing collected packages: setuptools, pip
Successfully installed setuptools pip
Cleaning up...

実際に仮想環境作ってみるとpipsetuptoolsがインストールされていた

1
2
3
4
5
6
$ cd
$ /opt/python-3.4.2/bin/pyvenv env342
$ source env342/bin/activate
(env342) $ pip list
pip (1.5.6)
setuptools (2.1)

とりあえず目的は達成したのでよしとする。 依存パッケージのインストールってこれで合ってるのか不安。

Install

http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/

  • MongoDB 2.6.4
  • Ubuntu 14.04
1
2
3
4
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
sudo apt-get update
sudo apt-get install -y mongodb-org

リモートからの接続を許可

/etc/mongodb.confのbind_ipをuncomment

1
# bind_ip = 127.0.0.1

restart

1
sudo service mongod restart

特になにも困ることなく普通にできました…

http://octopress.org/docs/setup/

詰まってたときに気になった点としては何かgemが足りてないのかなと 改めてbundle installした際にいくつかのgemがインストールされてたので octopressのhtmlを生成するための実行ファイルが中途半端に生成でもされたとしたら 納得できる結果かなあとは思うものの、とりあえずできたのでいいやっと。

  1. topページに記事が表示されない
  2. bundle installしたらいくつかgemがインストールされた
  3. 再度rake generateして見ても同様に記事が表示されない
  4. ~/octopress2に改めてセットアップ
  5. 適当に記事書いてrake generateしたらtopに表示された

まあrubyやりたくなったときに勉強しよう…

generating test is now.

title

  1. a
  2. b
  3. c

hoge foo bar