CentOS 5.3 に Django-1.1 と MySQL-Python-1.2.2 をインストールする

2009/10/09 セキュリティアップデートの Django-1.1.1 がリリースされました。
CentOS 5.3 に Django-1.1.1 をインストールする - forest book

Django-1.1 がリリースされました。

以下、CentOS 用のアップデートパッケージの作成方法になります。ご参考まで。

どのディストリビューションでビルドしたかが分かるように %dist マクロを定義します。

# vi /etc/rpm/macros.centos
### distribution macros
%dist .centos

Fedora EPEL の Django-1.0.2-2.el5.src.rpm を用いて Django-1.1 パッケージを作成します。

必要なパッケージやソースをダウンロードします
# wget http://ftp.yz.yamagata-u.ac.jp/pub/linux/fedora/epel/5/SRPMS/Django-1.0.2-2.el5.src.rpm
# wget http://www.djangoproject.com/download/1.1/tarball/

Django-1.1 用の spec ファイルに修正して、適切なディレクトリにソースを配置します。
# rpm -ivh Django-1.0.2-2.el5.src.rpm
# cd /usr/src/redhat/SOURCES/
# mv ~/Django-1.1.tar.gz .
# cd /usr/src/redhat/SPECS/
# cp -p Django.spec Django.spec.orig
# vi Django.spec
# diff -u Django.spec.orig Django.spec
 --- Django.spec.orig    2009-08-06 09:29:57.000000000 +0900 
 +++ Django.spec 2009-08-06 10:13:11.000000000 +0900         
 @@ -2,14 +2,14 @@                                      
  %{!?pyver: %define pyver %(%{__python} -c "import sys ; print sys.version[:3]")}

  Name:           Django
 -Version:        1.0.2
 -Release:        2%{?dist}
 +Version:        1.1
 +Release:        1%{?dist}
  Summary:        A high-level Python Web framework

  Group:          Development/Languages
  License:        BSD
  URL:            http://www.djangoproject.com/
 -Source0:        http://media.djangoproject.com/releases/%{version}/Django-%{version}-final.tar.gz
 +Source0:        http://media.djangoproject.com/releases/%{version}/Django-%{version}.tar.gz
  # stub simplejson module that imports the system version
  Source1:        simplejson-init.py
  BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 @@ -40,7 +40,7 @@


  %prep
 -%setup -q -n %{name}-%{version}-final
 +%setup -q -n %{name}-%{version}
  # remove bundled simplejson
  cd django/utils/simplejson/
  rm -rf *
 @@ -82,7 +82,7 @@
  %attr(0755,root,root) %{python_sitelib}/django/bin/*-messages.py
  %attr(0755,root,root) %{python_sitelib}/django/bin/daily_cleanup.py
  %attr(0755,root,root) %{python_sitelib}/django/bin/django-admin.py
 -%exclude %{_bindir}/django-admin.py?
 +#%exclude %{_bindir}/django-admin.py?
  %{python_sitelib}/django
  %if 0%{?fedora} >= 9
  %{python_sitelib}/*.egg-info

パッケージをビルドします
# rpmbuild -ba Django.spec
 ~~ sinip
 書き込み完了: /usr/src/redhat/SRPMS/Django-1.1-1.centos.src.rpm
 書き込み完了: /usr/src/redhat/RPMS/noarch/Django-1.1-1.centos.noarch.rpm
 書き込み完了: /usr/src/redhat/RPMS/noarch/Django-doc-1.1-1.centos.noarch.rpm
 実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.14446
 + umask 022
 + cd /usr/src/redhat/BUILD
 + cd Django-1.1
 + rm -rf /var/tmp/Django-1.1-1.centos-root-root
 + exit 0

パッケージをインストールします
# cd ../RPMS/noarch/
# rpm -Uvh Django-1.1-1.centos.noarch.rpm Django-doc-1.1-1.centos.noarch.rpm
準備中...         ########################################### [100%]
   1:Django       ########################################### [ 50%]
   2:Django-doc   ########################################### [100%]

パッケージを作成していて気付いたのですが、Fedora EPEL のパッケージでは、Django 本体に組み込まれている simplejson のコードを削除して、Python 標準ライブラリの simplejson を使用するように修正されています。

# cat /usr/src/redhat/SOURCES/simplejson-init.py
r"""
Stub simplejson library that just imports the version provided by the system
"""

from simplejson import *

同様の手順で MySQL-python パッケージを作成します。Django の依存関係で MySQL-python-1.2.2 以上を要求しますが、なぜか最新パッケージがまだ提供されていないようなので作成してみました。setup.py に "--optimize=1" オプションを与えると、.pyo ファイルを作成してくれるようです。

必要なパッケージやソースをダウンロードします
# wget http://ftp.yz.yamagata-u.ac.jp/pub/linux/centos/5/os/SRPMS/MySQL-python-1.2.1-1.src.rpm
# wget http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.2/MySQL-python-1.2.2.tar.gz/download

MySQL-python-1.2.2 用の spec ファイルに修正して、適切なディレクトリにソースを配置します。
# rpm -ivh MySQL-python-1.2.1-1.src.rpm
# cd /usr/src/redhat/SOURCES/
# mv ~/MySQL-python-1.2.2.tar.gz .
# cd /usr/src/redhat/SPECS/
# cp -p MySQL-python.spec MySQL-python.spec.orig
# vi MySQL-python.spec
# diff -ur MySQL-python.spec.orig MySQL-python.spec
 --- MySQL-python.spec.orig      2009-08-06 11:06:43.000000000 +0900
 +++ MySQL-python.spec   2009-08-06 11:10:12.000000000 +0900
 @@ -3,8 +3,8 @@

  Summary: An interface to MySQL
  Name: MySQL-python
 -Version: 1.2.1
 -Release: 1
 +Version: 1.2.2
 +Release: 1%{?dist}
  License: GPL
  Group: Development/Libraries
  Source0: http://prdownloads.sourceforge.net/mysql-python/MySQL-python-%{version}.tar.gz
 @@ -45,7 +45,7 @@
  rm -rf $RPM_BUILD_ROOT

  export libdirname=%{_lib}
 -python setup.py install --root=$RPM_BUILD_ROOT --record=INSTALLED_FILES
 +python setup.py install --root=$RPM_BUILD_ROOT --record=INSTALLED_FILES --optimize=1

  %clean
  rm -rf $RPM_BUILD_ROOT
 @@ -60,6 +60,10 @@
  %dir /usr/%{_lib}/python%{pyver}/site-packages/MySQLdb/constants

パッケージをビルドします
# rpmbuild -ba MySQL-python.spec
 ~~ sinip
 書き込み完了: /usr/src/redhat/SRPMS/MySQL-python-1.2.2-1.centos.src.rpm
 書き込み完了: /usr/src/redhat/RPMS/i386/MySQL-python-1.2.2-1.centos.i386.rpm
 実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.17584
 + umask 022
 + cd /usr/src/redhat/BUILD
 + cd MySQL-python-1.2.2
 + rm -rf /var/tmp/MySQL-python-buildroot
 + exit 

パッケージをインストールします
# rpm -ivh ../RPMS/i386/MySQL-python-1.2.2-1.centos.i386.rpm
準備中...               ########################################### [100%]
   1:MySQL-python       ########################################### [100%]

リファレンス:
Django 1.1 release notes | Django documentation | Django
「Django 1.1」リリース データベース連係やテスト周りの機能を強化:CodeZine
Re: [Distutils] bdist_rpm fails due to bytecompiled modules