ラベル Linux の投稿を表示しています。 すべての投稿を表示
ラベル Linux の投稿を表示しています。 すべての投稿を表示

2016年7月25日月曜日

wsgi.py で Permission denied が発生した場合の解消方法

mod_wsgi を利用した Django 環境を構築した際、Internal Error が発生した。
エラーログを確認したところ、以下のログが記録されていた。(一部省略)
(13)Permission denied: ...: Call to fopen() failed for '/.../testsite/testsite/wsgi.py'
ディレクトリや wsgi.py に対する permission も問題がないことを確認し、一向に原因がわからなかったが、ここここから、SELinux が原因であることが判明した。

原因を特定するため、ここの記載に従い、まず setroubleshoot-server をインストールした。
sudo yum install setroubleshoot-server
次に該当のサイトへアクセスし、エラーログ(/var/log/messages)を出力させる。
エラーログには、以下のメッセージは出力されていた。
Jul 24 07:46:40 xxxxxx python: SELinux is preventing /usr/sbin/httpd from read access on the directory testsite.

*****  Plugin catchall_boolean (89.3 confidence) suggests   ******************

If you want to allow httpd to read user content
Then you must tell SELinux about this by enabling the 'httpd_read_user_content' boolean.
You can read 'None' man page for more details.
Do
setsebool -P httpd_read_user_content 1


*****  Plugin catchall (11.6 confidence) suggests   **************************

If you believe that httpd should be allowed read access on the testsite directory by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# grep httpd /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp
メッセージに従い、httpd_read_user_content の値を変更(setsebool -P httpd_read_user_content 1)したところ、無事に表示された。

2014年11月22日土曜日

(リビジョンを変更せずに)Subversionで過去のリビジョンを永久に削除する方法

前回の方法でリポジトリを作成した場合、リビジョン番号は削除前のリビジョン番号よりも小さな値になる。
このとき、作成済みの作業コピーが記録しているリビジョン番号と異なるため、作業コピーから再作成後のリポジトリへアクセスすることができない。

そこで、リポジトリに空リビジョンを作成し、リビジョン番号の辻褄を合わせる。
まず、リポジトリを再作成する前に、リビジョン 0 より空リビジョン用のダンプファイルを作成する。
sudo sh -c "svnadmin dump -r 0:0 repo > skip.dump"
次にダンプファイル内の以下の値を変更する。
特に日時は、作業コピー作成前の日時になるように変更する。
sudo vim skip.dump


SVN-fs-dump-format-version: 2

UUID: 9bdad3bf-5b2e-41d3-be84-38a2beedc9c1

Revision-number: 1           # 0 → 1
Prop-content-length: 56
Content-length: 56

K 8
svn:date
V 27
2014-11-07T16:52:13.885682Z  # 作業コピー作成前の日時
PROPS-END
前回と同様にリポジトリを再作成するが、ダンプファイルをリロードする際、上で作成した skip.dump を空リビジョンとしてリロードしたのち、バックアップダンプファイルをリロードする。
for (( i=0; i<4; i++)); do sudo svnadmin load repo < skip.dump; done
sudo svnadmin load repo < repo.dump
なお、TortoiseSVN を利用して作業コピーから再作成したリポジトリへアクセスする場合は、まずSVN更新すること。

2014年11月16日日曜日

Subversion で過去のリビジョンを永久に削除する方法

Subversion は、その特性上、ファイルの追加や削除を問わず、過去のリビジョンをすべて管理する。
したがって、そのリポジトリのサイズは減少することがない。

長い間リポジトリを運用すると、リビジョンの中に今後一切不要なものも生じてくる。
このようなリビジョンは永久に削除したい。

まず、リポジトリに残したいリビジョンをダンプによりバックアップする。
以下の例では、repo リポジトリから、リビジョン5以降をダンプファイルとして取得している。
そののち、該当のリポジトリをいったん削除したのち再度作成し、ダンプファイルをリロードすればよい。
sudo sh -c "svnadmin dump -r 5:HEAD repo > repo.dump"
sudo rm -rf repo
sudo svnadmin create repo
sudo svnadmin load repo < repo.dump
なお、Apache 経由で TortoiseSVN を利用している場合は、再構築したリポジトリディレクトリを apache ユーザ の所有にすることを忘れないように。
また、SELinux を起動している場合は、以下のコマンドを投入する必要がある。
sudo chcon -R -t httpd_sys_content_t (リポジトリへのフルパス)
sudo chcon -R -t httpd_sys_rw_content_t (リポジトリへのフルパス)

2014年9月23日火曜日

CentOS7 のロケールを日本語に設定する

当たり前だが、CentOS の標準出力のデフォルトは英語になっている。
そのため、yum コマンドなどが出すメッセージは英語であり、かつ、すぐに消えてしまうため、何が出力されているのかわかりづらい。
そこで、ロケールの設定を日本語に変更する。

まず localectl コマンドで現在のロケール設定を表示する。
localectl
  System Locale: LANG=en_US.UTF-8 
      VC Keymap: jp106
     X11 Layout: jp
LANG=en_US.UTF-8 となっているように、英語が設定されている。

list-locales オプションで、CentOS で利用可能な日本語ロケールを検索する。以下のコマンドで出力結果のうち ja の文字列を有しているものを表示する。
localectl list-locales | grep ja
  ja_JP
  ja_JP.eucjp
  ja_JP.ujis
  ja_JP.utf8
  japanese
  japanese.euc
このうち、ja_JP.utf8 を設定する。
localectl set-locale LANG=ja_JP.utf8
  ==== AUTHENTICATING FOR org.freedesktop.locale1.set-locale ===
  Authentication is required to set the system locale.
  Authenticating as: (USER NAME)
  Password:
  ==== AUTHENTICATION COMPLETE ===

2014年7月27日日曜日

CentOS で SSH 接続のポート番号を変更する

SSH のデフォルトのポート番号は 22 であるが、well-known な番号であるため、変更したほうが望ましい。
まず、SSH で接続し、root ユーザに変更する。
SSH 接続の設定を変更するため、設定ファイルを編集する。
su -
vim /etc/ssh/sshd_config
設定ファイル内に #Port 22 とコメントアウトされて記載されている箇所がある。
当該箇所のコメント記号を外し、ポート番号を適当な番号に変更する。

そののち、SSH 接続の設定を再読み込みすればよい。
なお、再読み込み後は、SSH クライアントの設定を変更すること。
/etc/rc.d/init.d/sshd reload

2014年7月23日水曜日

公開鍵を利用したCentOS6への接続

CentOS には標準で OpenSSH がインストールされている。これを利用して公開鍵による接続を行う。
まず、PuTTY に付属している PuTTY Key Generator (PuTTYgen) を利用して、公開鍵と秘密鍵を作成する。
「Generate」ボタンを押下し、Key 領域内で適当にマウスカーソルを移動させる。 (マウスカーソルの座標位置より、暗号鍵を作成している。)
作成が完了したら、ssh でログインする際の認証キーである「Key passphrase」を入力する(同じ値を「Confirm passphrase」にも入力する)。

まず、作成した公開鍵と秘密鍵を格納するフォルダを作成する。
「Save public key」ボタンと「Save private key」ボタンを押下し、それぞれ公開鍵と秘密鍵を作成したフォルダに保存する。
なお以下、公開鍵を id_rsa.pub、秘密鍵を id_rsa.ppk と記載する。

次にサーバ上に公開鍵を配置する。
WinSCPなどのツールを利用し、公開鍵 id_rsa.pub を公開鍵を設定するユーザのホームディレクトリへ転送する。

次に PuTTY から通常のパスワード認証を利用し、公開鍵を設定するユーザIDでサーバへ接続する。
.ssh フォルダの有無を確認し、存在しない場合は、.ssh フォルダを作成する。その際、.ssh のパーミッションは、700(所有者のみ読取/書込/実行可能)に設定する。
mkdir .ssh
chmod 700 .ssh
PuTTYgen で作成した公開鍵はそのままでは OpenSSH 環境で使えない。
ssh-keygen コマンドで公開鍵を OpenSSH 環境で利用できるように変換する。
また、当該公開鍵のパーミッションを 600(所有者のみ読取/書込可能)に設定する。
ssh-keygen -i -f id_rsa.pub >> .ssh/authorized_keys
cd .ssh
chmod 600 authorized_keys
サーバ側の設定が完了したので、PuTTY を利用して接続する。
カテゴリから「接続」→「SSH」→「認証」を選択し、「参照ボタン」を押下する。先ほど保存した id_rsa.ppk を指定し、その他接続に必要な情報を入力する。
「セッション」カテゴリを選択し、「開く」ボタンを押下すると、パスフレーズの入力を求めてくる。
先ほど入力したパスフレーズを入力すると、サーバへの接続が完了する。

2013年10月31日木曜日

CentOS 5.9 へ vnc 経由で接続する

CentOS 5.9 には、標準で vnc-server がインストールされている。
vnc-server がインストールされていない場合、yum install コマンドによりインストールする。

root ユーザで /etc/sysconfig/vncservers を編集する。
vim /etc/sysconfig/vncservers

VNCSERVER="1:hoge"     # ディスプレイ番号:接続ユーザ名
VNCSERVERARGS[1]="-geometry 1280x1024 -nolisten tcp -nohttpd"  
# オプションは、以下の通り
# -geometry ディスプレイサイズ
# -nolisten tcp TCP経由での接続禁止
# -nohttpd WEB経由出のクライアント接続不可
# -localhost localhostのみ接続可(他端末からの接続の場合は、設定しないこと)
接続ユーザでログインしなおし、パスワードを作成する。
su hoge
vncpasswd

Password:xxxxx
Verify:xxxxx
再度、root ユーザで接続し、サービスを起動する。
あわせて、サーバ再起動時にサービスが自動起動するように chkconfig コマンドを発行する。
/etc/init.d/vncserver start
# すでに起動している場合は、restart オプションにて再起動する。

chkconfig vncserver on
再び、接続ユーザに変更し、~/.vnc/xstartup を編集し、デスクトップ環境を gnome に変更する。
vim ~/.vnc/xstartup

#twm &
exec gnome-session &
root ユーザで接続し、サービスを再起動する。
/etc/init.d/vncserver restart
iptables を編集し、接続ポート番号を開ける。
なお、接続ポート番号は、5900 + ディスプレイ番号となる。
vim /etc/sysconfig/iptables
/etc/rc.d/init.d/iptables restart

2013年7月2日火曜日

CentOS 5.x に django 1.4 をインストールする

CentOS 5.x に python 2.6 および mod_wsgi がインストールされていることを前提とする。

まずは、django のソースをダウンロードし、インストールする。
なお、setup.py を実行する際は、必ず、python 2.6 を使用する。
wget http://www.djangoproject.com/download/1.4.5/tarball/
tar xzvf Django-1.4.5.tar.gz
cd Django-1.4.5
python26 setup.py install
次に、django プロジェクトを作成する。
mkdir /var/www/cgi-bin/django
cd /var/www/cgi-bin/django
django-admin.py startproject testproject
開発用サーバを起動し、別端末より、django が動作することを確認する。
cd /var/www/cgi-bin/django/testproject
python26 manage.py runserver
curl http://localhost:8000/

<!DOCTYPE html>
<html lang="en"><head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="robots" content="NONE,NOARCHIVE"><title>Welcome to Django</title>
・・・
<div id="explanation">
  <p>
    You're seeing this message because you have <code>DEBUG = True</code> in your
    Django settings file and you haven't configured any URLs. Get to work!
  </p>
</div>
</body></html>
apache 側の設定をpython26-mod_wsgi.conf へ記載する。
WSGIScriptAlias /django /var/www/cgi-bin/django/testproject/testproject/wsgi.py
WSGIPythonPath /var/www/cgi-bin/django/testproject

<IfModule !python_module>
    <IfModule !wsgi_module>
        LoadModule wsgi_module modules/python26-mod_wsgi.so
    </IfModule>
</IfModule>

<Directory /var/www/cgi-bin/django/testproject/testproject>
Order deny,allow
Allow from all
</Directory>
apache を再起動し、apache経由でdjangoの動作を確認する。
service httpd restart
curl http://localhost/django/

<!DOCTYPE html>
<html lang="en"><head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="robots" content="NONE,NOARCHIVE"><title>Welcome to Django</title>
・・・
<div id="explanation">
  <p>
    You're seeing this message because you have <code>DEBUG = True</code> in your
    Django settings file and you haven't configured any URLs. Get to work!
  </p>
</div>
</body></html>

2013年6月23日日曜日

CentOS 5.x に mod_wsgi をインストールする

mod_wsgi は、Python を apache で動作させるためのモジュールである。
同様の機能は、古くは mod_python が担っていたが、シンプルで高速な mod_wsgi に注目が集まっている。
なお、apache がインストールされていることを前提とする。

まず、httpd-devel および python26-devel、python26-mod_wsgi をインストールしておく。
yum install httpd-devel python26-devel python26-mod_wsgi --enablerepo=epel
起動確認用のテストスクリプトを作成する。
vim /var/www/cgi-bin/test.py
import sys

def application(environ, start_response):
        status = "200 OK"
        output = sys.version

        response_headers = [("Content-type", "text/plain"),
                            ("Content-Length", str(len(output)))]
        start_response(status, response_headers)
        return [output]
上述のインストールの結果、apache の設定ファイルが /etc/httpd/conf.d/python26-mod_wsgi.conf に作成されているので、これに WSGIScriptAlias を追加する。
WSGIScriptAlias /test /var/www/cgi-bin/test.py   # この行を追加

<IfModule !python_module>
    <IfModule !wsgi_module>
        LoadModule wsgi_module modules/python26-mod_wsgi.so
    </IfModule>
</IfModule>
対象のURLへアクセスし、python2.6 のバージョン情報が表示されれば、適切にインストールされていることが確認できる。
curl http://localhost/test

2.6.8 (unknown, Nov  7 2012, 14:47:34)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-52)]

2013年6月19日水曜日

CentOS 5.x に Python 2.6 をインストールする

CentOS 5.x の Python のバージョンは、2.4.3 であるため、Django 1.4 以降は動作しない。
そこで、EPELリポジトリより、Python 2.6 をインストールする。
wget http://ftp.riken.jp/Linux/fedora/epel/5/i386/epel-release-5-4.noarch.rpm
rpm -Uvh epel-release-5-4.noarch.rpm
拡張リポジトリであるEPELリポジトリを通常使用しないように、設定します。
vim /etc/yum.repos.d/epel.repo

[epel]
name=Extra Packages for Enterprise Linux 5 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch
failovermethod=priority
enabled=0  # enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
yum installコマンドを発行し、Python2.6 をインストールするが、その際、--enablerepo=epelオプションを付与する。
yum install python26 --enablerepo=epel
インストールされているPythonのバージョンを確認する。
python -V

Python 2.4.3

python26 -V

Python 2.6.8
python26 の場合は、Python 2.6、python とした場合は、Python 2.4 を使用することができる。

2013年5月27日月曜日

CentOS のバージョンを確認する

プロンプトより、以下のコマンドを入力する。
cat /etc/redhat-release

2013年5月25日土曜日

ユーザを新規登録/削除する

Ubuntu 12.10 に対し、ユーザを新規作成するためには、端末より、useradd コマンドを入力する。
sudo useradd [ユーザ名]
また、登録したユーザに対し、パスワードを設定する際は、passwd コマンドを入力する。
sudo passwd [ユーザ名]
新しいUNIXパスワードを入力してください:
新しいUNIX パスワードを再入力してください:
passwd: パスワードは正しく更新されました
登録したユーザを削除したい場合は、userdel コマンドを使用する。
sudo userdel [ユーザ名]