[ << lilypond を実行する ] | [Top][Contents][Index] | [ convert-ly を使ってファイルを更新する >> ] |
| [ < 再配置アルゴリズム ] | [ Up: コマンド ラインの使用方法 ] | [ エラー メッセージ > ] |
chroot jail 環境で LilyPond を実行する
LilyPond を chroot jail 環境で実行させるようサーバをセットアップすることは複雑な作業です。以下にステップをリスト アップします。各ステップの中にある例は Ubuntu GNU/Linux 用であり、sudo の使用が必要となるかもしれません。
- 必要なパッケージをインストールします: LilyPond, Ghostscript, それに ImageMagick。
-
lilyという名前のユーザを作成します:adduser lily
このコマンドはユーザ
lilyのためにホーム フォルダ (/home/lily) と新しいグループも作成します。 - ユーザ
lilyのホーム フォルダで、独立したファイルシステムとして使用するファイルを作成します:dd if=/dev/zero of=/home/lily/loopfile bs=1k count= 200000
このコマンドは jail ファイルシステムとして使用する 200MB のファイルを作成します。
- ループ デバイスを作成し、ファイルシステムを作ってそれをマウントし、それからユーザ
lilyが書き込めるフォルダを作成します:mkdir /mnt/lilyloop losetup /dev/loop0 /home/lily/loopfile mkfs -t ext3 /dev/loop0 200000 mount -t ext3 /dev/loop0 /mnt/lilyloop mkdir /mnt/lilyloop/lilyhome chown lily /mnt/lilyloop/lilyhome
- サーバのコンフィグレーションで、JAIL は
/mnt/lilyloopとなり、DIR は/lilyhomeとなります。 - 以下に示すサンプル スクリプトのように必要なファイルをコピーして
jail の中に大きなディレクトリ ツリーを作成します。
sedを使うことで必要な実行形式ファイルをコピーすることができます:for i in "/usr/local/lilypond/usr/bin/lilypond" "/bin/sh" "/usr/bin/; \ do ldd $i | sed 's/.*=> \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& \ cp -L \/\1\2 \1\2/' | sed 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \ \1 \&\& cp -L \/\1\2 \1\2/' | sed '/.*=>.*/d'; done
32-bit Ubuntu 8.04 用のスクリプト例
#!/bin/sh
## defaults set here
username=lily
home=/home
loopdevice=/dev/loop0
jaildir=/mnt/lilyloop
# the prefix (without the leading slash!)
lilyprefix=usr/local
# the directory where lilypond is installed on the system
lilydir=/$lilyprefix/lilypond/
userhome=$home/$username
loopfile=$userhome/loopfile
adduser $username
dd if=/dev/zero of=$loopfile bs=1k count=200000
mkdir $jaildir
losetup $loopdevice $loopfile
mkfs -t ext3 $loopdevice 200000
mount -t ext3 $loopdevice $jaildir
mkdir $jaildir/lilyhome
chown $username $jaildir/lilyhome
cd $jaildir
mkdir -p bin usr/bin usr/share usr/lib usr/share/fonts $lilyprefix tmp
chmod a+w tmp
cp -r -L $lilydir $lilyprefix
cp -L /bin/sh /bin/rm bin
cp -L /usr/bin/convert /usr/bin/gs usr/bin
cp -L /usr/share/fonts/truetype usr/share/fonts
# Now the library copying magic
for i in "$lilydir/usr/bin/lilypond" "$lilydir/usr/bin/guile" "/bin/sh" \
"/bin/rm" "/usr/bin/gs" "/usr/bin/convert"; do ldd $i | sed 's/.*=> \
\/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed \
's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' \
| sed '/.*=>.*/d'; done | sh -s
# The shared files for Ghostscript...
cp -L -r /usr/share/ghostscript usr/share
# The shared files for ImageMagick
cp -L -r /usr/lib/ImageMagick* usr/lib
### Now, assuming that you have test.ly in /mnt/lilyloop/lilyhome,
### you should be able to run:
### Note that /$lilyprefix/bin/lilypond is a script, which sets the
### LD_LIBRARY_PATH - this is crucial
/$lilyprefix/bin/lilypond -jlily,lily,/mnt/lilyloop,/lilyhome test.ly
[ << lilypond を実行する ] | [Top][Contents][Index] | [ convert-ly を使ってファイルを更新する >> ] |
| [ < 再配置アルゴリズム ] | [ Up: コマンド ラインの使用方法 ] | [ エラー メッセージ > ] |