Django のデプロイ on Ubuntu

apache2-dev のインストール

sudo apt-get install apache2-thread-dev

mod_python のインストール

Synaptic から libapache2-mod-python をインストール

apache2.conf に以下の行を追記

<Location "/mysite/">  //←環境に合わせて変更
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE mysite.settings
    PythonOption django.root /mysite  //←環境に合わせて変更
    PythonDebug On
    PythonPath "['/path/to/project'] + sys.path"  //←環境に合わせて変更
</Location>

ソースの配置 (to be continued ...)

データベースの親ディレクトリのアクセス権を変更

apache2 の再起動

sudo /etc/init.d/apache2 restart

ブラウザで表示確認

http://localhost/mysite/admin/

Apache2 でユーザー認証 (Digest 認証)

環境

# apache2 -v
Server version: Apache/2.2.8 (Ubuntu)
Server built:   Mar  9 2010 20:42:14

認証エリアの作成

mkdir -p /var/www/member
cp /var/www/index.html /var/www/member/

Apache の設定ファイルを編集

# vi /etc/apache2/apache2.conf(↓を追記)
<Directory "/var/www/member">
  AuthType Digest
  AuthName "Secret Zone"
  AuthDigestDomain /member/
  AuthUserFile /etc/apache2/.htdigest
  Require user secret
</Directory>

認証ユーザーの作成

# htdigest -c /etc/apache2/.htdigest 'Secret Zone' secret
Adding password for secret in realm Secret Zone.
New password:
Re-type new password:

auth_digest_module のインストール

# a2enmod
Which module would you like to enable?
...
Module name? auth_digest
Module auth_digest installed; run /etc/init.d/apache2 force-reload to enable.

Apache を再起動

/etc/init.d/apache2 restart

Web ブラウザで http://localhost/member/ にアクセスすると、
ユーザー認証用のダイアログボックスが表示される!

LFS on Ubuntu(6) 一時的環境の構築 (Expect-5.43.0 〜)

Expect の解凍

tar zxvf expect-5.43.0.tar.gz
cd expect-5.43

バグフィックス

// GCC のテストスイートの失敗を回避
patch -Np1 -i ../expect-5.43.0-spawn-1.patch

// Tcl の最近の変更に対応
patch -Np1 -i ../expect-5.43.0-tcl_8.5.5_fix-1.patch

Expect の configure スクリプトが、ホストシステムの /usr/local/bin/stty ではなく、 /bin/stty を利用するように修正

cp -v configure{,.orig}
sed 's:/usr/local/bin:/bin:' configure.orig > configure

Expect をコンパイルするための準備

./configure --prefix=/tools --with-tcl=/tools/lib \
  --with-tclinclude=/tools/include --with-x=no

Expect のインストール

make
make test
make SCRIPTS="" install

DejaGNU のインストール

tar zxvf dejagnu-1.4.4.tar.gz
cd dejagnu-1.4.4
./configure --prefix=/tools
make install
make check

Ncurses のインストール

tar zxvf ncurses-5.7.tar.gz
cd ncurses-5.7
./configure --prefix=/tools --with-shared \
    --without-debug --without-ada --enable-overwrite
make
make install

Bash のインストール

tar zxvf bash-4.1.tar.gz
./configure --prefix=/tools --without-bash-malloc
make
make tests
make install
ln -vs bash /tools/bin/sh

Bzip2 のインストール

tar zxvf bzip2-1.0.5.tar.gz
cd bzip2-1.0.5
make PREFIX=/tools install

Coreutils のインストール

tar zxvf coreutils-8.4.tar.gz
cd coreutils-8.4
./configure --prefix=/tools --enable-install-program=hostname
make
make install

別名ファイルを作り出して手動で su をインストールする

cp -v src/su /tools/bin/su-tools

Diffutils のインストール

tar zxvf diffutils-2.8.1.tar.gz
cd diffutils-2.8.1
./configure --prefix=/tools
make
make install

LFS on Ubuntu(5) 一時的環境の構築 (GCC-4.4.3 - 2回目〜)

部分的に GCC の古い機能を復活させるパッチを適用

$ cd $LFS/sources/gcc-4.4.3
$ patch -Np1 -i ../gcc-4.4.3-startfiles_fix-1.patch

fixincludes スクリプトの実行を無効とする

$ cp -v gcc/Makefile.in{,.orig}
$ sed 's@\./fixinc\.sh@-c true@' gcc/Makefile.in.orig > gcc/Makefile.in

コンパイラフラグ -fomit-frame-pointer を有効化

$ cp -v gcc/Makefile.in{,.tmp}
$ sed 's/^T_CFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in.tmp \
  > gcc/Makefile.in

すべての実行モジュール類を新しい Glibc に対してリンクする

$ cd gcc-4.4.3

for file in \
 $(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h)
do
  cp -uv $file{,.orig}
  sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
  -e 's@/usr@/tools@g' $file.orig > $file
  echo '
#undef STANDARD_INCLUDE_DIR
#define STANDARD_INCLUDE_DIR 0
#define STANDARD_STARTFILE_PREFIX_1 ""
#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file
  touch $file.orig
done

GCC のインストール

$ rm -rf gcc-build
$ tar -jxf mpfr-2.4.2.tar.bz2
$ mv -v mpfr-2.4.2 ./gcc-4.4.3/mpfr
$ tar -jxf gmp-5.0.0.tar.bz2
$ mv -v gmp-5.0.0 ./gcc-4.4.3/gmp
$ mkdir -v gcc-build
$ cd gcc-build
$ CC="$LFS_TGT-gcc -B/tools/lib/" \
    AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib \
    ../gcc-4.4.3/configure --prefix=/tools \
    --with-local-prefix=/tools --enable-clocale=gnu \
    --enable-shared --enable-threads=posix \
    --enable-__cxa_atexit --enable-languages=c,c++ \
    --disable-libstdcxx-pch --disable-multilib \
    --disable-bootstrap
$ make
// 超長い(笑)
$ make install

シンボリックリンクの作成

$ ln -vs gcc /tools/bin/cc

健全性検査 (sanity check)

echo 'main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /tools'

テストファイルの削除

rm -v dummy.c a.out

Tcl のインストール

$ tar zxvf tcl8.5.8-src.tar.gz
$ cd tcl8.5.8/unix
$ ./configure --prefix=/tools
$ make

// テストスイート
$ TZ=UTC make test

$ make install

インストールされたライブラリを書き込み可能にし、後でデバッグシンボルを削除できるようにする

chmod -v u+w /tools/lib/libtcl8.5.so

Tcl のヘッダファイルをインストール

make install-private-headers

必要となるシンボリックリンクを生成

ln -sv tclsh8.5 /tools/bin/tclsh

LFS on Ubuntu(4) 一時的環境の構築 (ツールチェーンの調整)

ツールチェーンの調整

SPECS=`dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/specs
$LFS_TGT-gcc -dumpspecs | sed \
  -e 's@/lib\(64\)\?/ld@/tools&@g' \
  -e "/^\*cpp:$/{n;s,$, -isystem /tools/include,}" > $SPECS
echo "New specs file is: $SPECS"
unset SPECS

健全性検査 (sanity check)

echo 'main(){}' > dummy.c
$LFS_TGT-gcc -B/tools/lib dummy.c
readelf -l a.out | grep ': /tools'

テストファイルの削除

rm -v dummy.c a.out

Binutils のインストール

$ rm -rf binutils-build
$ mkdir -v binutils-build
$ cd binutils-build
$ CC="$LFS_TGT-gcc -B/tools/lib/" \
   AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib \
   ../binutils-2.20/configure --prefix=/tools \
   --disable-nls --with-lib-path=/tools/lib
$ make
$ make install

次に行う「再調整」の作業に向けてリンカ (梨花?) を準備

make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin

LFS on Ubuntu(3) 一時的環境の構築 (Glibc-2.11.1)

Linux-2.6.32.8 API ヘッダのインストール

$ tar -jxf linux-2.6.32.8.tar.bz2
$ cd linux-2.6.30.2
$ make mrproper
$ make headers_check
$ make INSTALL_HDR_PATH=dest headers_install
$ cp -rv dest/include/* /tools/include

Glibc のインストール

// make の際に必要
# apt-get install gawk

$ mkdir -v ../glibc-build
$ tar -jxf glibc-2.11.1.tar.bz2
$ cd glibc-build
$ case `uname -m` in
  i?86) echo "CFLAGS += -march=i486 -mtune=native" > configparms ;;
esac
$ ../glibc-2.11.1/configure --prefix=/tools \
    --host=$LFS_TGT --build=$(../glibc-2.11.1/scripts/config.guess) \
    --disable-profile --enable-add-ons \
    --enable-kernel=2.6.18 --with-headers=/tools/include \
    libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes
$ make
// 長い(笑)
$ make install

LFS on Ubuntu(2) 一時的環境の構築 (GCC-4.4.1 - 1回目)

作業するプラットフォームの 「三つの組 (target triplet)」 で表される名称を確認

$ bzip2 -dc binutils-2.20.tar.bz2 | tar xvf -
$ cd binutils-2.20
$ ./config.guess
i686-pc-linux-gnu
$ echo $LFS
/mnt/lfs

ダイナミックリンカの名前を確認

$ readelf -l /bin/ls | grep interpreter
      [Requesting program interpreter: /lib/ld-linux.so.2]

ロスコンパイル版 Binutils のインストール

$ su - lfs
$ cd $LFS/sources
$ mkdir -v binutils-build
$ cd binutils-build
$ ../configure \
--target=$LFS_TGT --prefix=/tools --disable-nls --disable-werror
$ make
$ make install

ロスコンパイル版 GCC のインストール

$ cd ..
$ tar -jxf mpfr-2.4.2.tar.bz2
$ tar -jxf gmp-5.0.0.tar.bz2
$ tar -jxf gcc-4.4.3.tar.bz2

// gcc-4.4.3 配下に mv しないと configure エラーになる
$ mv -v mpfr-2.4.2 ./gcc-4.4.3/mpfr
$ mv -v gmp-5.0.0 ./gcc-4.4.3/gmp

$ mkdir -v gcc-build
$ cd gcc-build
$ ../gcc-4.4.3/configure \
> --target=$LFS_TGT --prefix=/tools \
> --disable-nls --disable-shared --disable-multilib \
> --disable-decimal-float --disable-threads \
> --disable-libmudflap --disable-libssp \
> --disable-libgomp --enable-languages=c
$ make
$ make install

// libgcc.a へのシンボリックリンクを生成
$ ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name |\
> sed 's/libgcc/&_eh/'`
`/mnt/lfs/tools/bin/../lib/gcc/i686-lfs-linux-gnu/4.4.1/libgcc_eh.a' -> `libgcc.a'