星期一, 11月 09, 2015

CentOS 7

安裝選擇GNOME桌面的安裝,設定好網路之後就可以開始了。
安裝需要的套件
yum update
yum install epel-release.noarch
yum install cmake.x86_64 httpd php GMT-devel.x86_64 git.x86_64 gcc.x86_64 libxml2-devel.x86_64 json-c-devel.x86_64 proj-devel.x86_64 proj-epsg.x86_64 zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel tcl-devel gdbm-devel libdb4-devel libpcap-devel xz-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel lapack-devel.x86_64 qhull-devel.x86_64 libpng-devel.x86_64 gcc-c++.x86_64 netcdf-devel.x86_64 agg-devel.x86_64 libjpeg-turbo-devel.x86_64
yum install libffi-devel -y # python 3.7 需要這個套件
一、安裝 python3.7.0
#export mypyenv=3.6.5;
export mypyenv=3.7.0;
wget https://www.python.org/ftp/python/"$mypyenv"/Python-"$mypyenv".tgz
tar zxvf Python-"$mypyenv".tgz
cd Python-"$mypyenv"/
export LDFLAGS=-L/usr/lib64;./configure --prefix=/opt/python"$mypyenv"  --enable-shared
make
make test
#如果順利沒有報錯,就進行下一步
make install
#設定python3 的環境變數
vi /etc/profile.d/pythonvar.sh
#! /bin/bash
PYTHON3=/opt/python3.6.5
if [ -z "${PATH}" ]
then
    PATH="$PYTHON3/bin"; export PATH
else
    PATH="${PATH}:$PYTHON3/bin"; export PATH
fi
if [ -z "${MANPATH}" ]
then
    MANPATH="$PYTHON3/share/man"; export MANPATH
else
    MANPATH="$PYTHON3/share/man:${MANPATH}"; export MANPATH
fi

if [ -z "${LIBRARY_PATH}" ]
then
    LIBRARY_PATH="$PYTHON3/lib"; export LIBRARY_PATH
else
    LIBRARY_PATH="$PYTHON3/lib:${LIBRARY_PATH}"; export LIBRARY_PATH
fi

if [ -z "${LD_LIBRARY_PATH}" ]
then
    LD_LIBRARY_PATH="$PYTHON3/lib"; export LD_LIBRARY_PATH
else
    LD_LIBRARY_PATH="$PYTHON3/lib:${LD_LIBRARY_PATH}"; export LD_LIBRARY_PATH
fi
#這個版本直接裝了pip了,接下來就來安裝必需套件
pip3 install numpy
pip3 install scipy
pip3 install matplotlib
pip3 install netcdf4
pip3 install pandas
pip3 install pillow
pip3 install pytz
pip3 install python-dateutil
basemap 因為太大,只能自行安裝,方法如下
wget https://downloads.sourceforge.net/project/matplotlib/matplotlib-toolkits/basemap-1.0.7/basemap-1.0.7.tar.gz #下載 basemap-1.0.7
tar zxvf basemap-1.0.7.tar.gz; cd basemap-1.0.7
# 安裝geos lib
# 關於geos lib的版本問題,不管是系統帶的,還是epel,版本最新只到3.4,但是basemap好像需要3.5.X,再後續要安裝postgis套件時,會用到postgresql10的套件庫,
# 它提供的就是3.5的版本,因此建議先安裝其套件庫 
#yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-1.noarch.rpm
yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
# 再執行yum安裝就會用上新版的geos lib
yum install proj-devel
#yum install geos-devel
yum install geos36-devel # pgdg-centos10-10-2.noarch.rpm的套件已經改用3.6了,且套件名也加上版號。
#上面的geos36-devel的安裝資料夾也改為/usr/geos36。
#basemap需要GEOS lib,它預設是檢查/usr/local/netcdf /usr/local/lib,但是我們前一步yum裝的時候,是放在/usr/include /usr/lib64/usr/geos36。
#所以需要透過export GEOS_DIR 告訴它位置後再用python3執行setup.py
#export GEOS_DIR=/usr; python3 setup.py install # 注意大小寫
export GEOS_DIR=/usr/geos36; python3 setup.py install # 注意大小寫
成功之後進到python3並執行 
from mpl_toolkits.basemap import Basemap
第一次執行會出現下面的訊息,
/opt/python3.5.2/lib/python3.5/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
  warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')


二、設定apache, php, wsgi,設定 apache 使用 wsgi 模組
#假設已經安裝httpd, php 

#沒有的話請 
yum install httpd php
#CentOS7好像不太希望人客用改iptables檔案的方式來管理防火牆規則。

#所以用 firewall-config

#執行下列命令

firewall-config

#細節就不多說了,反正記得http, https要勾選。

#啟動httpd
/sbin/service httpd start
#用瀏覽器連上IP測試看看是否能看到Testing 123.. 的頁面,有的話繼續下一步。

#開始設定之前,需先確保我們用的是自行編譯的PYTHON3.5.2,不是CentOS系統裏的2.X。
[root@localhost site-packages]# python3
Python 3.5.2 (default, Aug 29 2016, 19:12:24) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import site
>>> site
<module 'site' from '/opt/python3.5.2/lib/python3.5/site.py'>
>>> exit()

#前面的/opt/python3.5.2就是編譯時的設定 --prefix=/opt/python3.5.2,
#所以site-packges的完整路徑如下:
/opt/python3.5.2/lib/python3.5/site-packages


#確定之後,接下來繼續安裝及設定 django 與 wsgi
yum install httpd-devel.x86_64 #記得裝這個
#安裝 mod_wsgi
#不是用 yum install mod_wsgi.x86_64 #這個根我們編譯的版本不見得合
pip3 install mod-wsgi  #httpd-devel.x86_64沒裝的話,會有找不到apxs的錯誤。

#裝完之後,會有一個執行檔叫mod_wsgi-express,在/opt/python3.5.2/bin/中,
mod_wsgi-express install-module 
#會得到下面的內容,這是apache要載入模組時用的,:
LoadModule wsgi_module /usr/lib64/httpd/modules/mod_wsgi-py35.cpython-35m-x86_64-linux-gnu.so
WSGIPythonHome /opt/python3.5.2

#設定載入 mod_wsgi
#新增django.conf在/etc/httpd/conf.d 下
vi /etc/httpd/conf.d/django.conf
LoadModule wsgi_module modules/mod_wsgi.so
WSGIDaemonProcess 192.168.4.20 python-path=/var/www/cgi-bin:/opt/anaconda3/lib/python3.4/site-packages
WSGIProcessGroup 192.168.4.20
WSGIScriptAlias /test /var/www/cgi-bin/testa.py process-group=192.168.4.20

# 上面的設定內容。是指當有人連到 http://192.168.4.20/test 時,系統(當然是192.168.4.20這台機器)會去執行testa.py
# 在/var/www/cgi-bin/ 中新增 testa.py 檔案,
# 內容如下:
def application(environ, start_response):
    status = '200 OK'
    output = b'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]

    start_response(status, response_headers)

    return [output]

/sbin/service httpd restart
# 如果一切正常,用瀏覽器造訪 http://192.168.4.20/test
# 就能看到 Hello World!
</module>

#關於wsgi.py 當執行 django-admin startproject odbintl 時,會產生 odbintl 資料夾
#odbintl 資料夾裏有manage.py,然後還有再一層的odbintl資料夾,這一層裏就放著settings.py, wsgi.py urls.py等
#其中,這些檔案是不是需要有可執行的權限?看樣子是不用,雖然上網查有些問題會要求大家設執行權限。
#我的wsgi.py的內容就是預設值,沒變,內容如下
"""
WSGI config for odbintl project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/
"""

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "odbintl.settings")
# 上面的test就是startproject時給的名字
application = get_wsgi_application()

#當我們新增一個project時,apache如何知道要這專案在哪?當然是要到/etc/httpd 裏去設定
vi /etc/httpd/conf.d/django.conf
LoadModule wsgi_module /usr/lib64/httpd/modules/mod_wsgi-py35.cpython-35m-x86_64-linux-gnu.so
#怎麼知道在哪呢?用這個就可以得到 mod_wsgi-express install-module
#WSGIPythonHome /opt/python3.5.2
#WSGIDaemonProcess 192.168.4.20 python-path=/var/www/cgi-bin/odbintl:/opt/python3.5.2/lib/python3.5/site-packages
#WSGIProcessGroup 192.168.4.20

#WSGIScriptAlias /test /var/www/cgi-bin/testa.py process-group=192.168.4.20
#WSGIScriptAlias /odbintl /var/www/cgi-bin/odbintl/odbintl/wsgi.py process-group=192.168.4.20

WSGIScriptAlias /odbintl /var/www/cgi-bin/odbintl/odbintl/wsgi.py
WSGIPythonPath /var/www/cgi-bin/odbintl:/opt/python3.5.0/lib/python3.5/site-packages

Alias /favicon.ico /var/www/cgi-bin/odbintl/static/favicon.ico
Alias /robots.txt /var/www/cgi-bin/odbintl/static/robots.txt

Alias /odbintl/media /var/www/cgi-bin/odbintl/media
Alias /static /var/www/cgi-bin/odbintl/static/

<directory cgi-bin="" odbintl="" static="" var="" www="">
Require all granted
</directory>

<directory cgi-bin="" media="" odbintl="" var="" www="">
Require all granted
</directory>

<directory cgi-bin="" odbintl="" var="" www="">
<files wsgi.py="">
Require all granted
</files>
</directory>

三、安裝postgis (因為django有些套件會用到裏面的lib,所以就算不啟用postgresql,這一步的軟體還是要裝,但不用啟動服務,因為我們會把postgresql資料庫的服務裝在另一台電腦)
# PostgreSQL穩定版的到10.0,到這裏 http://yum.postgresql.org/repopackages.php 找到我們系統的套件 CentOS 7 x86_64
# 複製連結,然後用yum install 安裝。
yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-1.noarch.rpm
# 接下來安裝postgis
yum install postgresql10-server.x86_64 postgresql10-contrib.x86_64 postgresql10-devel.x86_64 postgis24_10-devel.x86_64
# postgresql 設定
/usr/pgsql-10/bin/postgresql-10-setup initdb # 初始化,這個指令會建一個postgres表,所有者是postgres。
chkconfig postgresql-10 onsystemctl enable postgresql-10 # 設定開機啟動
/sbin/service postgresql-10 startsystemctl start postgresql-10 # 啟動postgresql server

要讓postgres透過本地端連線且使用md5認證的方法為
su postgres
psql #不加 -U postgres 也行,因為已經是postgres使用者了,所以就是用postgres登入,但此時是用peer的認證方式)
alter user postgres password '********'; #設定密碼,其實建議不用設,用postgres使用者登入後在psql就好,因為它只用來系統維護。
\q #退出資料庫
exit #退出postgres使用者
修改
vi /var/lib/pgsql/10/data/pg_hba.conf
#加上
local   all             postgres                                md5
/sbin/service postgresql-10 restart

#新增資料庫使用者,及新建資料庫(如果打算從舊資料庫的備份搬移資料庫過來,就不用這一步)
su postgres
createdb djangodb
psql
CREATE USER abcuser WITH PASSWORD 'xxxxxx' ; <--新增使用者(這個使用者已經是本機使用者時用)
CREATE USER abcuser WITH ENCRYPTED PASSWORD 'xxxxxx' ; <--新增使用者且對密碼加密(這個不需本機使用者,且可以用MD5由別台機登入)
GRANT ALL PRIVILEGES ON DATABASE djangodb to abcuser ;
\q
#註,abcuser如果不是linux使用者,那麼socket的認證方式要改成md5,
#連線到djangodb
psql djangodb
CREATE EXTENSION postgis; <-- #設定postgis extension,

#在/etc/profile.d 下新增 pgsqlvar.sh
#! /bin/bash
PGSQLHOME=/usr/pgsql-10
if [ -z "${PATH}" ]
then
    PATH="$PGSQLHOME/bin"; export PATH
else
    PATH="$PGSQLHOME/bin:${PATH}"; export PATH
fi

四、postgreSQL搬移
#簡單QA1: 如果搬移前本來有舊版的資料(不是指舊版本的資料庫),如之前備份後沒在用,現在要再備份一次。那怎辦,
#因為不會做差異備份所以,目前只好把原資料庫砍了,再重新初始化一次,步驟如下:
#1先把資料庫的服務關掉,
#2把 /var/lib/pgsql/10/data更名(這是指initDB時用的是預設值的時候)。還有/var/lib/pgsql/10/initdb.log 這個檔也先更名。目的是失敗時可以回來。
#3再啟動資料庫服務,重新執行前面的initdb及之後的步驟,就可以得到一個乾淨的資料庫了。

#從舊機器匯出資料 PS:舊資料庫管理員 postgres 
#如果postgre沒設密碼,且是預設的socket認證(就是peer),那就切換成 su postgres,再執行下面指令。
pg_dumpall | gzip > pgsql_backup.dump # 沒有家目錄,可以先cd /tmp ,

#如果之前有設密碼,且允許md5認證,那可用下面的方式
pg_dumpall -U postgre | gzip > pgsql_backup.dump
#會問密碼好幾次,請勿打錯(錯一次就得重來),建議在記事本上打完複製,然後三次都用貼上的。
#複製pgsql_backup.dump至新機器,並匯入資料 PS:新資料庫的管理員是postgres

#在新機器中
# 如果只允許linux socket認證(就是peer)則執行
su postgres
gunzip -c filename.gz | psql

#如果允許md5認證則執行下列指令匯入資料
gunzip -c filename.gz | psql -U postgres  # 當然需要密碼,就上面的'*********'

#要讓postgresql可以透過tcp連線有二個部份要設定,pg_hba.conf及postgresql.conf
#記得pg_hba.conf設的是client的IP, postgresql.conf設的是server的IP。
#修改 /var/lib/pgsql/10/data/pg_hba.conf 這裏的設定主要是你的伺服器要開放哪一個使用者透過哪個IP連到哪個資料庫。
host    dbname             username             192.168.4.20/32            md5
host    dbname             username             192.168.4.11/32            md5

#修改/var/lib/pgsql/10/data/postgresql.conf 指定哪個IP來提供服務,預設是localhost,(如果你的機器有同時很多個IP的話,那就可以指定其中一個或用*來表示全部。)
#總之,這裏的設定是表示你的postgresql伺服器要用哪一個IP來服務大家。我們的pgsql 的 SERVER IP是 192.168.4.22,所以設定如下(不知道為什麼如果只是給DJANGO的連線(127.0.0.1),可以不用這個設定)
listen_addresses = 'localhost,192.168.4.22'           # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
port = 5432                             # (change requires restart)
#重新啟動postgresql服務
/sbin/service postgresql-10 restart

五、postgresql資料庫同步
如果機器掛了!!!!!!有備援的資料庫多好。
主機器的設定
vi /var/lib/pgsql/10/data/pg_hba.conf 加上一行
host    replication     postgres    192.168.2.199/32         trust 
# 上面那一行,主要是讓192.168.2.199的機器可以透過postgres 進行備份


vi /var/lib/pgsql/10/data/postgresql.conf 
listen_addresses = 'localhost, 192.168.4.22' #(serverIP是伺服器的IP)
wal_level = 'hot_standby'
archive_mode = on
archive_command = 'cd .'
max_wal_senders = 16 
hot_standby = on

備援機的設定
按前面方法裝一台postgresql資料庫,並initDB且設好postgres的密碼
/usr/pgsql-10/bin/postgresql10-setup initdb # 初始化,這個指令會建一個postgres表,所有者是postgres。
alter user postgres password '********'; #設定密碼
pg_basebackup -D /var/lib/pgsql/10/data -F p -X stream -v -P -h 192.168.4.22 -U postgres
備份成功之後,會多了 /var/lib/pgsql/10/data
[root@localhost 10]# ll /var/lib/pgsql/10/
總計 12
drwx------.  2 postgres postgres    6  8月 11 07:34 backups
drwx------. 20 root     root     4096  9月  9 10:43 data #<-- 注意,如果使用者不是postgres要變更。
-rw-------.  1 postgres postgres 1406  9月  6 14:41 initdb.log

chown postgres:postgres -R data
# 設定recovery.conf,預設是沒這個檔案,但是有提供sample檔,所以我們先複製一份過來
cp /usr/pgsql-10/share/recovery.conf.sample /var/lib/pgsql/10/data/recovery.conf
vi recovery.conf
standby_mode = on
primary_conninfo = 'host=192.168.4.22 port=5432 user=postgres'
trigger_file = '/home/ha/pgdb/pg.trigger.file'
#存檔後重新啟動服務
/sbin/service postgresql-10 restart


#
六、安裝 GDAL2.1.1
# 安裝 netcdf, openjpeg, geos, c++ compiler
yum install netcdf-devel.x86_64 openjpeg-devel.x86_64 geos-devel.x86_64 gcc-c++.x86_64
# 下載
export GDALVER="2.1.1"
wget http://download.osgeo.org/gdal/$GDALVER/gdal-$GDALVER.tar.gz
tar zxvf gdal-$GDALVER.tar.gz
cd gdal-$GDALVER
./configure --prefix=/usr/local/gdal-$GDALVER
make
make install
#完了之後記得設定path

##
# 用pip3 安裝 python下的 gdal
##
# 一直以來用pip3 install gdal 都會遇到如下的錯誤:
# error: command 'gcc' failed with exit status 1
# 查了一下,這問題大概是和系統裝的GDAL版本有關
# 首先確保我們可以執行如下指令取得安裝的版本
gdal-config --version 
#如果正常,會顯示安裝版本…如果不正常,要不就是沒有安裝GDAL,要不就是路徑沒設定。
#可以正常執行gdal-config之後,再用如下指令安裝正確的版本即可
pip3 install GDAL==$(gdal-config --version | awk -F'[.]' '{print $1"."$2}')

七、移植django
#因為django_raster套件的需要,postgis, GDAL2.1.1要先裝
# 因為我們server用的是postgresql 所以要先測試postgresql是否可正常使用
pip3 install django
#執行下面的安裝如果找不到pg_config這個執行檔,它應該是安裝postgis時會產生的,在/usr/pgsql-X.Y/bin 中
#可以在/etc/profile.d/ 中新增pgsqlvar.sh 內容如下:
[root@localhost gdal-2.1.1]# vi /etc/profile.d/pgsqlvar.sh 
#! /bin/bash
PGSQLHOME=/usr/pgsql-10 # 這個是我們裝pgsql的資料夾
if [ -z "${PATH}" ]
then
    PATH="$PGSQLHOME/bin"; export PATH
else
    PATH="$PGSQLHOME/bin:${PATH}"; export PATH
fi
#存檔後重新登出登入,或 source /etc/profile.d/pgsqlvar.sh
pip3 install django
pip3 install psycopg2
# 測試django
django-admin startporject mytest
cd mytest
vi mytest/settings.py
#把下面的部份,用sqlite改成postgis
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'cmdodb',
        'USER': 'xxx',
        'PASSWORD': 'axxxxx',
        'HOST': 'localhost',
        'PORT': '',
    }
}
#python3 managy.py mytest
#如果一切正常,就表示django與postgresql及apache整合正常,可以正式開始移值
# 開始移植django
# 依據上一步,應該已經有了可以用wsgi模組的apache。
# 把機器A的 django project copy 到機器B。
# 我的django project 放在 /var/www/cgi-bin/odbintl 中
# 不想太麻煩,所以東西就copy到機器B的/var/www/cgi-bin/odbintl 中
scp -r cmd@192.168.4.11:/var/www/cgi-bin/odbintl ./
# django的project,一定有一個managy.py,先用它來試一些指令,通常它會載入setttings.py
# 其中就會import一些有的沒的模組,如果有我們後來裝上的,非系統帶的,就會報錯,這時就用pip裝回去就是了
python3 managy.py
#出現 ImportError: No module named 'django_extensions'
pip3 install django_extensions
# 再執行一次
python3 managy.py
# 這次出現 ImportError: No module named 'django_countries'
pip3 install django_countries
#####
# 接下來陸續遇到 django-raster, django-geojson
#終於,裝好了,python3 manage.py,結果,遇到下面的怪問題
######
File "/opt/python3.5.0/lib/python3.5/site-packages/raster/ogrraster.py", line 7, in <module>
    from utils import convert_pixeltype, HEADER_STRUCTURE, HEADER_NAMES,\
ImportError: No module named 'utils'
#看起來應該是 django-raster套件的問題,且出在第七行from utils import convert_pixeltype...
#直接執行 python3,並輸入 from utils import convert_pixeltype 果然出現一樣的問題
#解決方法,是 from utils import 改成 from .utils import 
#對,就是utils前面加上一個.號。
#所以,就修改有問題的那一個檔案吧,
vi /opt/python3.5.0/lib/python3.5/site-packages/raster/ogrraster.py
#跳到第七行,在utils前面加上一個.
#本來
from .utils import convert_pixeltype, HEADER_STRUCTURE, HEADER_NAMES,\
#改成
from .utils import convert_pixeltype, HEADER_STRUCTURE, HEADER_NAMES,\
#存檔

#############
# 確認特殊資料夾的寫入權限
#############
#當然,如果有一些暫存檔產生,或供上傳的地方,就要注意資料夾權限,通常是所有者改為apache
#在舊伺服器的django app(我的是 /var/www/cgi-bin/ )目錄輸入下面的指令
[root@cmd1-odb cgi-bin]# ll -R odbintl | grep ^d | grep apache 
drwxrwxr-x  2 apache apache   4096 Sep 10 15:14 media
drwxrwxr-x 2 apache apache 262144 Oct 29 16:23 django-cache
#所以當檔案移到新伺服器時,也要記得確定資料夾的所有者
chown -R apache:apache media
chown -R apache:apache django
最後的最後,SELINUX如果沒做相應的設定,那就disable它吧,不然會報錯。
#############
# 修改odbintl/settings.py
#############
#只列出需要改的地方
#ALLOWED_HOSTS = ['nrtinfo.oc.ntu.edu.tw']
ALLOWED_HOSTS = ['192.168.4.20'] # 新伺服器的IP
GDAL_LIBRARY_PATH = '/usr/local/gdal2.0.1/lib/libgdal.so' #GDAL2.0.1 程式庫的路徑
#由於原本的django與postgresql是同一台伺服器,這次只搬移django,postgresql伺服器沒更動
#所以至需要更改settings.py讓它連上原來的伺服器。
DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'yyyyyy',
        'USER': 'xxx',
        'PASSWORD': 'zzzzzz',
        'HOST': '192.168.x.x',
        'PORT': '5432',
    }
# 原伺服器的postgresql開放給新主機連入,至少三個地方要改
# 1 postgresql.conf(開放給哪個機器連入,以及哪個port)、
#主要改的部份為listen_addresses
vi /var/lib/pgsql/9.3/data/postgresql.conf # 注意,不同版本的路徑不見得一樣
listen_addresses = 'localhost,192.168.4.20,192.168.4.11'                # what IP address(es) to listen on;
port = 5432

# 2 pg_hba.conf,讓本來透過local連資料庫的使用者,可以由host連入。
vi /var/lib/pgsql/9.3/data/pg_hba.conf
#新增一行類似下面的內容
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    yyyyyy             xxx             192.168.4.xx/32            md5
#yyyyyy是資料庫的名字,使用者是xxx。這裏的資料當然是要與odbintl/settings.py檔案裏的內容一樣。
#就是django是透過哪個使用者連到postgresql的哪個資料庫,密碼在settings.py要給,這裏當然是不用。因為settings.py是資料庫的client端。
#這裏的設定是針對server端,意思是給哪個使用者,透過哪個ip連到哪個資料庫,加密方法是md5。密碼早就設好了,在postgresql設定時設好的。
#重啟postgresql 服務
/sbin/service postgresql-9.3 restart 
#注意服務名稱,如果不確定,用 chkconfig --list | grep postgresql 查一下postgresql的全名。
# 3 防火牆開5432這個port. 建議用system-config-firewall 修改,以下是直接修改iptables檔案,新增一行
vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT
/sbin/service iptables restart

</module>
django使用不同版本 gdal library 的方法,由於CentOS 的EPEL套件庫預設裝的GDAL版本雖然新,但通常也不會太新。但是我們的GEO-DJANGO會要求使用新一點的版本
解決方法是編輯settings.py (CREATE PROJECT時就會有的那個檔案,你知道的)
加上一行
GDAL_LIBRARY_PATH = '/usr/local/gdal-2.1.0/lib/libgdal.so' #路行看你編譯時放哪


問答:
Q:硬是把資料表砍了之後,如何重建?
A:python3 manage.py sqlmigrate app_name 0001 | python3 manage.py dbshell

Q:XYZ檔轉成GEOTIFF的指令(用GDAL)
A:gdal_translate -Ot Float32 -of Gtiff -a_srs "EPSG:4326" ./Taidp200m.xyz taidp200m_raw.tiff

Q:django 的view 裏的request物件中的key如何做到不管大小寫?
A:  把request.GET裏的字串都改成小寫,另外存一個python的dictionary(取名為request_lower),要注意的是request物件用request.GET.get(key)取值。但python dictionary用request_lower.get(key)。指令為 request_lower={k.lower():request.GET.get(k).lower() for k in request.GET}。

Q: 建站初期,總有需要全站重建的時候,如何清空資料?
A: 全站清空指令 python3 manage.py flush (會提醒你這個動作不可反悔,接受就按yes)。清空完之後,基本上連建好的superuser(肯定也包含user)都會不見,需要重建superuser(python3 manage.py createsuperuser)。

Q: django 的 view 裏 import xarray (或pandas之類的套件之後) 系統就停在那了…用web browser去看,就是一直等,等到逾時。此時到伺服器去restart httpd 的服務也要等半天。關於此類的錯誤,請到apache的設定檔去(關於WSGI的部份),在WSGIScriptAlias下面新增如下面的一行:
WSGIApplicationGroup %{GLOBAL}
原因如下(擷取自stack overflow):
Various of the scientific packages that it is going to need will not work in Python sub interpreters. That directive will force the use of the main interpreter context.
Q: gdal_translate 將xyz轉成geotiff的方法
A: gdal_translate -ot Float32 -of GTiff -a_srs EPSG:4326 -a_nodata 9999 Taidp.xyz test.tif
Q: geotiff 由rgb轉成rgba的方法
A: gdal_translate rgb_in.tif rgba_out.tif -b 1 -b 2 -b 3 -b mask
Q: ftp使用非pasv模式時,會卡住
A: 防火牆需載入想應的模組 /sbin/modprobe nf_conntrack_ftp 與 /sbin/modprobe nf_nat_ftp 每次重開機都要載入,就把這二行寫在/etc/rc.local 這個檔案裏面。
Q: 使用roundcube web mail時,doovecot 會報錯,大致內容是無法改變家目錄下/mail/.imap/INBOX 的權限。
A: mkdir -p /etc/skel/mail/.imap/INBOX # 這/etc/skel 裏的東西就是家目錄在建立時會出現的東西,所以把INBOX先建好即可。
Q: 使用Centos7用autofs無法成功掛winXP的網芳(XP很舊我知道),但用smbclient明明有顯示分享磁碟。
A: 可以看/var/log/messages,如果有如下的版本問題的訊息,那可以特別指定用哪一版,
kernel: No dialect specified on mount. Default has changed to a more secure dialect, SMB2.1 or later (e.g. SMB3), from CIFS (SMB1). To use the less secure SMB1 dialect to access old servers which do not support SMB3 (or SMB2.1) specify vers=1.0 on mount.
所以auto.misc的內容如下
disk1 -fstype=cifs,rw,noperm,vers=1.0,username=xxx,password=yyyyy ://192.168.1.50/diskd
七、安裝 seadas
wget http://oceandata.sci.gsfc.nasa.gov/SeaDAS/installer/7.2/seadas_7.2_linux64_installer.sh
sh seadas_7.2_linux64_installer.sh
# 安裝 ocssw 時需要 git 套件,不然會有奇的問題。 yum install git.x86_64 
八、安裝地圖服務(MapServer 7.0)
8.1 mapserver
MapServer7.0在CentOS7上面裝比CentOS6方便多了,因為CentOS7的套件夠新,符合MapServer7.0所需。
#首先安裝所需套件
yum install proj-epsg.x86_64 # <-- -dcmake_install_prefix="/opt/mapserver" -dcmake_prefix_path="/usr/local/gdal2.0.1" -dwith_curl="ON" -dwith_kml="ON" ..="" 2="" 8.2="" 8.3="" apserver7.0.0="" bin="" build="" cairo-devel.x86_64="" cat="" cd="" cgi-bin="" cmake="" download.osgeo.org="" epsg="" errno:="" error.="" error="" fcgi-devel.x86_64="" for="" fribidi-devel.x86_64="" gdal1="" gdal2.0.1="" gdal2="" gdal="" giflib-devel.x86_64="" harfbuzz-devel.x86_64="" http:="" httpd="" init="epsg:4326" install="" install_manifest.txt="" lib64="" lib="" libmapcache.so.1.4.0="" libmapcache.so.1="" libmapcache.so="" library="" list="" local="" make="" map="/var/www/html/map/wms2.map&" mapcache-1.4.0.tar.gz="" mapcache-1.4.0="" mapcache.fcgi="" mapcache="" mapcache_seed="" mapserv="" mapserver-7.0.0.tar.gz="" mapserver7.0="" mapserver="" mkdir="" mod_mapcache.so="" modules="" msprocessprojection="" no="" pre="" proj-epsg.x86_64="" proj="" projection="" system="" tar="" usr="" wget="" yum="" zxvf="">
九、安裝 samba

星期三, 10月 28, 2015

compile mb-system version 5.5.2252

在安裝mb-system 5.5.2252版時,遇到下面的問題: configure: error: Did not find libgmt according to --with-gmt-lib - check the installation! 我的gmt5是裝在 /usr/local/gmt5 裏
#執行下述命令時就是會出問題
./configure --with-netcdf-include=/usr/local/netcdf/include --with-netcdf-lib=/usr/local/netcdf/lib --with-gmt-include=/usr/local/gmt5/include/gmt --with-gmt-lib=/usr/local/gmt5/lib64
#檢查config.log
#可以看到下列訊息
#configure:14103: checking for GMT_begin in -lgmt
#configure:14128: gcc -o conftest -g -O2   -L/usr/local/gmt5/lib64 conftest.c -lgmt  -lm  >&5
#/usr/bin/ld: warning: libpsl.so.5, needed by /usr/local/gmt5/lib64/libgmt.so, not found (try using -rpath or -rpath-link)
#查一下configure 14103行附近
vi configure
if test "$GOT_GMT" = "yes" ; then
        $as_echo "GMT library location specified: $gmt_libdir - check if libgmt libpsl are there..."
    save_LDFLAGS=$LDFLAGS
    LDFLAGS="$LDFLAGS -L$gmt_libdir"
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GMT_begin in -lgmt" >&5 #<--這是14103行
$as_echo_n "checking for GMT_begin in -lgmt... " >&6; }
if ${ac_cv_lib_gmt_GMT_begin+:} false; then :
  $as_echo_n "(cached) " >&6
else
  ac_check_lib_save_LIBS=$LIBS
LIBS="-lgmt  $LIBS" # <-- 這一行有問題,現在的gmt需要加上 -lpsl
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */
###
#所以把 change the LIBS line
LIBS="-lgmt  $LIBS" 
#改成 to
LIBS="-lgmt -lpsl $LIBS"
試用
TMPLIST=tmplist
DATALIST="datalist"
ls -1 | grep all$ > $TMPLIST
mbdatalist -F-1 -I $TMPLIST > $DATALIST # 產生datalist-1 檔
mbdatalist -F-1 -I $DATALIST -N # 每個原始檔會產生三個檔案,副檔名依次為 fbt fnv inv 
mbm_plot -F-1 -I $DATALIST -G2 -N -C # -N:航跡。-G2 有打光的彩色地形。-C:等深線。

./datalist-1.cmd