ubuntuでShape 形式の地図データをTopoJSON 形式に変換する。

簡単な事を言うと、下記ブログで書かれている事をしようとした時に環境が違うので、ubuntu環境でのやり方を自分の為にも記録。

D3.js で日本地図を描く - y_uti のブログ

ubutnuでShape形式の地図データをTopoJSON 形式に変換する 為に次のステップを踏む必要があるが、ShapeからGeoJSONに変換する為に、ogr2ogrという コマンドを使うらしい。 そのコマンドが使えるライブラリは、CentOSだと、EPELというパッケージに揃っているらしいのだが、私の環境はubuntuで構築しているので、ubuntuでogr2ogrを利用する為の手順を記録しておく。

  1. Shape 形式の地図データを入手する

  2. GeoJSON 形式に変換する

  3. TopoJSON 形式に変換する

まずは、ogr2ogr --version以前構築した際に、環境にすでにインストールしているかもしれないので、バージョンコマンドで確認してみた所、、、、入ってない。(入れた記憶ないし、そりゃそうだ。)

で、丁寧にgdal-binをインストールしなさいと教えてくれたので、管理者権限でインストール。 sudo apt-get install gdal-bin

で無事にインストールできたか確認 ogr2ogr --version GDAL 1.10.1, released 2013/08/26と表示され、無事にインストールできたよう。

では、ogr2ogrを使って、GeoJSONファイルに変換。

ogr2ogr -f GeoJSON ne_10m_admin_0_disputed_areas.geojson ne_10m_admin_0_disputed_areas.shp

ここまでできたので、あとは、上で紹介したブログの通りに進めようとした所、他にもインストールしておく必要のある ライブラリを使っていたので、それもインストール。

apt-get install jq

それから、npmも使うので、インストール。

apt-get install npm npmをインストールしたら、npmをつかって、topjsonをインストール。

npm -g install topojson

とりあえず、これでubuntuでの準備はOK

開発環境整えるまで。自分用のメモ

環境構築のために、いろんなものインストール。 目指す開発環境は、仮想環境上で、webサーバーとserversideの言語をインストールし、webサービス構築の基盤を作ること。 サーバーは、ubuntu14.04 言語は、Python

仮想環境側はVagrantのBox化をして、これ以降の作業で壊しても最低限の環境に素早く復旧できる ようにしておく。

mac側にインストールするもの。

仮想環境側でインストールするもの

とりあえず、この環境でベースとなるVagrant boxを作成。 boxの名前はubuntu14.04xbase

Django環境構築 Linux CentOS 編 その3 Python2.7.9インストール

edtech.hatenadiary.jp

前回の続き

CentOS に入って、まずはアップデートできるものを確認する。 yum check-update

f:id:kuniwoomou:20150427222823p:plain

一応確認し、特に何か確認しておきたいものがあるわけではないので、 スルーして、アップデートを実行する。

updateはルート権限で行う。

sudo yum update

インストールに必要なものをインストール sudo yum install zlib zlib-devel tk-devel tcl-devel sqlite-devel ncurses-devel gdbm-devel readline-devel bzip2-devel db4-devel openssl-devel

続いて、Python2.7.9のインストール

wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
tar zxvf Python-2.7.9.tgz
cd Python-2.7.9
./configure --with-threads --enable-shared --prefix=/usr/local
make
sudo make altinstall

Python2.7.9の圧縮ファイルをダウンロードして、解凍し、できたPython2.7.9フォルダに移動してから、インストールしています。

つづいて、Djangoをインストールしたいのですが、Djangoを簡単にインストールする為に pipをインストールします。

sudo easy_install pip

Djangoのインストール

pip install Django==1.8

Djangoが無事にインストールされているかの確認。 pythonを実行して、import djangoとしてエラーがでなければ成功。

>>> import django
>>> print django.get_version()

1.8と出たので、Ctrl + DでPythonインタプリタモードから抜けて、

mkdir test

Djangoでソースを置きたいフォルダを作成し、今回はtestとして作った。 移動する。

次回は、Apache と mod_wsgi のインストールをしていきたいと思います。

Django環境構築 Linux CentOS 編 その2 Vagrantの操作

前回の続きedtech.hatenadiary.jp

いよいよ、CUI側でvagrantでバーチャル環境を構築していきます。 ちなみに、Vagrantとは何ぞやについてや、Vagrantについてもっと知りたい方は こちらを読んでみると良いです。Vagrant入門 – Vagrantとは? なぜ Vagrant なのか? | WEB ARCH LABO

Vagrantではまず、Boxを作ります。Boxを一からつくるより、すでに作られたBOXを 持ってくる方が簡単です。すでに作られたBOXを検索するのは、こちらから辿ってください。

A list of base boxes for Vagrant - Vagrantbox.es

詳しくは、下記URLの記事を参照ください。 Mac OS X 版Vagrantを利用して仮想マシンを操作してみよう | WEB ARCH LABO 簡単に説明すると、vagrant boxを追加する上で、Box名は好きに作れます。
Box名を{name}の部分に、下記、その後に上のURLから辿ってほしいOSのバージョンのURLをコピーしたものを{url}の部分に貼り付けます。
vagrant box add {name} {url}

今回はCentOS 7をインストールしたいと思います。 が、ここでいきなり打ち込む前に少しした準備をしておきたいと思います。 管理しやすいようにフォルダを作成しておきます。

mkdir MyVagrant && cd MyVagrant mkdir mycentos7 && cd mycentos7

mkdirはフォルダ作成コマンドです。 mkdir {フォルダ名} cdはフォルダへの移動をします。cd MyVagrantとする事で、MyVagrantフォルダに移動しています。 &&は2つのコマンドをつなげて1行で実行する時に使います。

Linuxのコマンドを詳しく知りたい人は下記URLも参考にしてください。 Linux コマンドリファレンス

何の為にこんな事をしているかというと、この後に行う、Vagrant環境構築で、vagrantofileというものができます。で、今回はCentOSを追加しますが、Ubuntuなども追加したい場合や、他のバージョンのCentOSの環境を作ろうといった場合に、フォルダを分けて作成するのですが、その場所をMyVagrantフォルダで管理しようとしています。

それでは、次の場所に移動したら、MyVagrant/mycentos7/ vagrant boxを追加していきましょう。

vagrant box add mycentos7 https://f0fff3908f081cb6461b407be80daf97f07ac418.googledrive.com/host/0BwtuV7VyVTSkUG1PM3pCeDJ4dVE/centos7.box

としました。 f:id:kuniwoomou:20150427170044p:plain

インストールができているかを確認するためにvagrant box listと打ちます。

f:id:kuniwoomou:20150427170301p:plain listに今回追加したmycentos7 (virtualbox,0)と出て来れば成功です。

次に仮想マシンの初期化をします。 vagrant init mycentos7

f:id:kuniwoomou:20150427170651p:plain

初期化がすんだので、仮想マシンを早速立ち上げます。 起動のコマンドは、vagrant upとなります。

成功していれば、エラーでないのですが、今回はエラーがでちゃいました。

Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

という事で、対処方法を探すとここにあった。 Vagrantの仮想マシンにphpMyAdminをインストール - one by one

早速、実行

$ vagrant ssh
$ sudo /etc/init.d/vboxadd setup
$ exit
$ vagrant halt
$ vagrant up

ちなみに、vagrant sshで、一度CentOS7にアクセスしてからルート権限で、vboxaddをセットアップして、 その後一度、仮想環境を終了して、再度、起動をしている。

/etc/init.d/vboxaddが何するファイルか気になったので、再びログインしてviエディタで中を覗きにいったら、 カーネルモジュールと書かれていた。ちなみに、カーネルモジュールについて知りたい方はこちら Linuxキーワード - カーネル・モジュール:ITpro

さて、深追いしたおかけげ、何しているのかが若干もやっと理解できたが、その部分はまた今度違う時に書きます。ここで書くと横道それすぎちゃうので。

vagrant upの後に、あらためて、

vagrant ssh

CentOSバージョン7の環境に入ります。

これで、CentOSの仮想環境立ち上げが終わりました。 次回からは、実際にCentOS7にDjangoの環境を構築していきます。

ちなみに、ここまでやってよくわからないけどエラーでてしまったとか、どこまでやったかわからなくなって 最初からやり直したいなんて場合は、

vagrant sshでログインできていれば、exitで抜けてから、vagrant haltで終了させて、vagrant destroyで 環境を壊して、再度やり直してみてください。

vagrantのコマンドは以下を参考ください。 コマンドライン | Vagrant日本語ドキュメント

Django環境構築 Linux CentOS編 その1

Djangoの環境を構築。色々なブログの些細な走り書きを読みながら進めても、ちっとも 頭の中が整理されないので、本筋はDjangoの公式のインストールドキュメントから始めようと 思います。

で、クイックインストールではなく、詳細インストールの方を進めて、自分で構築したい環境を作る 事を実現できるようになるのが私の目的!

まずは、Django のインストール — Django 1.4 documentationこちらを読み進めて、 初心者には知らない単語やその意味などをを調べて追記しながら行きたいです。(ちなみに、ここでいう初心者は私の事です。)

当然、初心者なので、環境構築して壊してを頻繁に繰り返すだろう事から、仮想環境に構築していく 手順を追加していきます。

目指すべき環境構築は、Mac OSX上にVirtualBoxVagrant をインストールして、Linux環境を実現して、そこにpython2.7.9(2系の最新版かつ、DjangoはPython3系では動かない為)をインストールして、Djangoをインストール。また、ゆくゆくはWebサービス化したいので、 Apache と mod_wsgiをインストールして環境を構築していきます。 ちなみに、Pythonには2系と3系の2種類のバージョンが現存しています。2系は、2020年にサポート終了予定となり、2系はVer2.7.9以降は正式リリースされないようです。

まず、Djangoを動かす為に必要なPythonの環境を構築したいと思います。

最初に、Virtualboxを下記よりダウンロードします。(私はMac OSXなので、dmgファイルをインストールして、そのまま普通にGUI側のインストーラーでインストールします。) Oracle VM VirtualBox - Downloads | Oracle Technology Network | Oracle

続いて、Vagrantをインストールします。これも、下記からインストールしてください。 ここでは、mac版をインストールしています。これも特に難しい事なくインストールできると思います。 Download Vagrant - Vagrant

両方ともインストールしたら、ここからターミナルを使って作業していきます。 ターミナルを起動しましょう。念のため、ターミナルの場所をUPしておきます。 Launchpadのその他の中にあります。黒い四角いアイコンです。 f:id:kuniwoomou:20150427144059p:plain

それでは、まずはじめに、Vagrantが無事にインストールされているかを確認してみます。 ターミナルの表示は、f:id:kuniwoomou:20150427144624p:plainこのように、 ほにゃらら、$ となっています。ほにゃららの所は、各個人によって違うと思います。

このほにゃららの より先の$の次からコマンドを書いていきます。 次のように打ってみてください。

$ vagrant -v

f:id:kuniwoomou:20150427145009p:plain

バージョン1.7.2というのがわかったかと思います。これで、無事にインストールされている事がわかりました。

次回は、この続きから設定していきます。

開発独学メモ 環境構築 仮想サーバー構築(最初の失敗)

バーチャルボックスをインストールして、Vagrantをインストール。

その後、Vagrantのboxを作成して、ubuntuサーバーをインストール 仮想環境のubuntuサーバー上に、Djangoの環境構築し、Webサーバーを立てて、 クライアント上にあるフォルダと繋げる。

その初期段階で、一旦独自のbox化しておく。ここまでをやる。

  1. BOXをダウンロード
    vagrant box add ubuntu14.04 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box

  2. BOXが無事にダウンロードされているか確認
    vagrant box list

  3. boxをイニシャライズする
    vagrant init ubuntu14.04

  4. boxを起動する。
    vagrant up

  5. 立ち上がった仮想環境にsshで入る。
    vagrant ssh

  6. 仮想サーバーのubuntusshで接続している状態からのログアウト
    exit

  7. 再度、vagrantで仮想サーバーubuntuを立ち上げる。
    vagrant up

  8. 再びsshでログイン
    vagrant ssh

  9. ubuntuPythonが入っているか確認
    python --version

  10. パッケージ情報を最新化する。
    sudo apt-get update sudo apt-get upgrade

  11. Heroku にデプロイするための Heroku Toolbelt をインストールする。
    wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh

  12. 無事にインストールされているか確認する。
    heroku version

  13. DjangoやHerokuデプロイに必要なライブラリをインストールする。
    sudo apt-get install python-pip python-virtualenv libpq-dev

  14. pipのバージョンを確認する。
    (pipとは、Pythonで書かれたパッケージソフトウェアをインストール・管理するためのパッケージ管理システムでRubyのJemのようなもの)
    pip --version

  15. Djangoの環境構築
    任意のフォルダをつくって、作ったフォルダに移動する。
    mkdir フォルダ名 cd フォルダ名
    mkdir potfolio && cd portfolio

  16. virtualenvでpythonの仮想環境を実行する
    ※そもそも、Virtualboxで仮想環境のサーバー立ててるのに、その中でさらにpython のバージョン違いを共存させる為のVirtualenvを入れているのか?については、とりあえず勉強の為に入れているので、自分でもまだ用途がわかってない。という事で、virtualenvとは、Python の様々なバージョンの環境を仮想的に提供することができるもので、ディレクトリ毎に使用するPythonを変更できる。ここでは、venvというディレクトリを作成し、そのディレクトリ環境にDjango環境を構築する。 virtualenv venv

  17. 作成したvenvのディレクトリにパスを通す。アクティベートする。
    パスを通さないと、グローバルのPythonが実行されるので。
    source venv/bin/activate

  18. ubuntuにpycongをインストールする為にビルドに必要なライブラリをインストール。
    sudo apt-get install python-dev libpq-dev

  19. easy_installを使ってインストールする為、easy_installが入っているsetuptoolsをインストール。
    sudo apt-get install python-setuptools

  20. psycopg2をインストール
    sudo easy_install psycopg2

  21. Django開発関連をインストールする。
    pip install django-toolbelt

  22. ちゃんとインストールされているかを確認する。
    pip list
    下記が入っていれば成功。
    argparse (1.2.1)
    dj-database-url (0.3.0)
    dj-static (0.0.6)
    Django (1.8)
    django-toolbelt (0.0.1)
    gunicorn (19.3.0)
    pip (1.5.4)
    psycopg2 (2.6)
    setuptools (2.2)
    static3 (0.5.1)
    wsgiref (0.1.2)

  23. Djangoのプロジェクトファイルを作成
    django-admin.py startproject さっき作った任意のファイル名 . django-admin.py startproject portofolio .
    最後の「 . 」ドットを忘れずに!

  24. manage.pyができている事を確認する。
    ls -l

  25. Heroku の実行プロセスにある Dynos に渡す実行パラメータを Procfile というテキストファイルに記述する。
    echo 'web: gunicorn portofolio.wsgi --log-file -' | tee Procfile web: gunicorn portofolio.wsgi --log-file -

  26. 開発サーバーを立ち上げてみる。
    foreman start
    ※一応立ち上がるが、HTMLの返却が確認できない。仮想サーバー上だからか?とりあえず、今の段階ではスルー しておく。

  27. デプロイする為の準備をする。
    pip freeze > requirements.txt ブラウザで、下のURLで無事にできているか確認
    https://[app-name].herokuapp.com/
    残念。エラー状態。という事で、ここは一旦スルー

  28. 仮想サーバーのubuntu上にWebサーバーをインストール
    * yumでインストールするので、yumをインストール。
    sudo apt-get install yum
    これで色々と頑張っていたが、うまくいかない。で調べてみると、 権限を与える必要があるようで、色々と検索すると、 ubuntu yumリポジトリを追加をする必要がありそうという事がわかった。 さらに調べていくと、Debian系のLinuxではapt-getを使っていて、 RedHat系のLinuxでは、yumを使っているという事らしい。なので、CentoOSではyum,Ubuntuではaptという事。じゃあ、わざわざyumでインストールしないで、apt-getでいいじゃん。と思い、apt-getでインストール事に。
    ここで、もう一つの罠。yum では、yum install httpdと書くので
    apt-get install httpdとすると間違い。下記でインストールできる。
    apt-get install apache2

  29. Apache 用の Python WSGI アダプタモジュールをインストールする。 sudo apt-get install libapache2-mod-wsgi

  30. Pythonで使うツールをインストール
    sudo apt-get install python-setuptools

  31. mysqlをインストール
    sudo apt-get install mysql-server python-mysqldb

  32. apache2のバージョン確認
    apache2 -v

  33. srvフォルダにwwwフォルダを作成する。
    現在は、home/vagrant/portfolioにいるので、絶対パスsrvフォルダにwwwフォルダを作成する。
    sudo mkdir srv/www
    wwwフォルダに移動する。
    cd /srv/www
    で、ここで先に作った、virtualenvの環境を移動させようかと思ったけど、まだあんまり理解してないし、 そもそも、Herokuにデプロイしてうまくいってない環境を移動してもしょうがないので、あらためて作る事に。

  34. virtualenvの環境から抜ける。抜けずにやろうとしたけどなんかうまくいかず。 virtualenvの環境から抜けるには以下。 deactivate ちなみに、再度入る時はcdでvenvに戻って以下(あってるかわからないが、これで入れる) source venv/bin/activate

  35. virtualenvの環境にdjangoをインストールしていたが、通常の環境にはいれてないので、再度インストール
    sudo pip install django

  36. あらためて、Djangoのプロジェクトを作成する。
    sudo django-admin.py startproject portfolio .

  37. WSGIの設定をする為の事前準備
    cd /srv/www/portfolio
    sudo mkdir apache
    cd apache
    sudo vi django.wsgi

viエディタで以下を記入する。

import os
import sys

#path = '/srv/www'
#if path not in sys.path:
#    sys.path.insert(0, '/srv/www')
sys.path.append('/srv/www')
sys.path.append('/srv/www/portfolio')

os.environ['DJANGO_SETTINGS_MODULE'] = 'portfolio.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

38.Apachの設定 sudo vi /etc/apache2/sites-available/portfolio.conf

<VirtualHost *:80>

    ServerName 192.168.33.10
    DocumentRoot /srv/www/portfolio

    <Directory /srv/www/portfolio>
        Order allow,deny
        Allow from all
    </Directory>

    WSGIDaemonProcess portfolio.djangoserver processes=2 threads=15 display-name=%{GROUP}
    WSGIProcessGroup portfolio.djangoserver

    WSGIScriptAlias / /srv/www/portfolio/apache/django.wsgi

</VirtualHost>

ここで、一旦、IPアドレスが必要になったので、新規ウィンドウでターミナルをたてて、 Vagrantfileをviでひらいて、 IPアドレスで接続できるように編集する。

# config.vm.network "private_network", ip: "192.168.33.10"
 config.vm.network "private_network", ip: "192.168.33.10"

39.設定を有効化する。

sudo a2ensite portfolio
sudo /etc/init.d/apache2 restart

とここまでやったが、うまくいかず。原因は、複数あるので特定が難しく再チャレンジする事に、 現在わかっているのは、設定ファイル名とプロジェクトのファイル名でスペルミスがあったという事。

ただ、だいぶ意味がわかってきたので。 次回、もっとコンパクトに最初から再チャレンジしようと思います。 いらない作業が結構あったのと、学習目的としてと環境構築として必要な構成を共存させてしまっていたので、 その辺りは、次回はBox別に構築しようかと思います。

また、ubuntuとは別にCentOSも立ててみようかと。

今回の学習で参考にしたサイト以下