pkg_create を効率化2007年09月14日 12時24分48秒

FreeSBIE はその主な処理で、大量の IO を発生するので遅い。以前のパッチを使ったり、tmpfs を使えば、随分と早くなるが、まだまだ、改善の余地は沢山ある。

今回は、pkg_create をキャッシュすることによって、二度目以降に何度も作り直すのを回避することによって、高速化を図っている。PKGPATH を指定することによって、パッケージを保存する場所を指定すると、既に作られているパッケージはそこから取ってくる。


diff -urN conf/freesbie.defaults.conf conf/freesbie.defaults.conf
--- conf/freesbie.defaults.conf 2006-01-04 18:23:10.000000000 -0500
+++ conf/freesbie.defaults.conf 2006-03-28 01:30:09.000000000 -0500
@@ -41,6 +41,9 @@
 # Path of the built image, use absolute path
 IMGPATH=${IMGPATH:-"/usr/obj/FreeSBIE.img"}

+# Path of the pkg , use absolute path
+PKGPATH=${PKGPATH:-"/usr/obj/freesbie-pkgs"}
+
 # Default parameters for the image, use diskinfo(1) to obtain yours
 SECTS=${SECTS:-501760} # Total number of sectors
 SECTT=${SECTT:-32}     # Sectors/track
diff -urN scripts/pkginstall.sh scripts/pkginstall.sh
--- scripts/pkginstall.sh       2005-12-28 10:15:18.000000000 -0500
+++ scripts/pkginstall.sh       2007-08-30 21:01:56.000000000 -0400
@@ -144,6 +144,12 @@
     echo "Copying ${totpkg} packages"
     cd ${CHROOTWD}
     set +e
+    if [ -n "${PKGPATH:-}" ]; then
+       mkdir -p ${PKGPATH}
+       pkgsuffix="tgz"
+    else
+       pkgsuffix="tar"
+    fi
     echo -n "[0"
     count=1
     while read pkg; do
@@ -154,14 +160,25 @@
            echo -n "."
        fi
        count=$((${count} + 1))
+       pkgfile=${pkg}.${pkgsuffix}

-       echo "Running pkg_create -b ${pkg} ${CHROOTWD}/${pkg}.tar" >> ${LOGFILE}
-       pkg_create -b ${pkg} ${CHROOTWD}/${pkg}.tar >> ${LOGFILE} 2>&1
+       if [ -n "${PKGPATH:-}" ]; then
+           if [ ! -f "${PKGPATH}/${pkgfile}" ]; then
+               echo "Running pkg_create -b ${pkg} ${PKGPATH}/${pkgfile}" >> ${LOGFILE}
+               pkg_create -b ${pkg} ${PKGPATH}/${pkgfile} >> ${LOGFILE} 2>&1
+           fi
+           echo "Hard Link ${PKGPATH}/${pkgfile} ${CHROOTWD}/${pkgfile}" >> ${LOGFILE}
+           (ln ${PKGPATH}/${pkgfile} ${CHROOTWD}/${pkgfile} || \
+           cp ${PKGPATH}/${pkgfile} ${CHROOTWD}/${pkgfile} ) >> ${LOGFILE} 2>&1
+       else
+           echo "Running pkg_create -b ${pkg} ${CHROOTWD}/${pkgfile}" >> ${LOGFILE}
+           pkg_create -b ${pkg} ${CHROOTWD}/${pkgfile} >> ${LOGFILE} 2>&1
+       fi

-       echo "Running $pkgaddcmd ${chrootpkgpath}/${pkg}.tar" >> ${LOGFILE}
-       $pkgaddcmd ${chrootpkgpath}/${pkg}.tar >> ${LOGFILE} 2>&1
+       echo "Running $pkgaddcmd ${chrootpkgpath}/${pkgfile}" >> ${LOGFILE}
+       $pkgaddcmd ${chrootpkgpath}/${pkgfile} >> ${LOGFILE} 2>&1

-       rm ${CHROOTWD}/${pkg}.tar
+       rm ${CHROOTWD}/${pkgfile}

     done < $pkgfile
     echo "]"

ほとんどの場合、一度だけ FreeSBIE を動かして、ISO イメージを作り追えることはない。何度か繰り返して、最終版を作るので、何度もパッケージを作り直しても、無駄なだけだ。

このパッチを ports に入れる方法。パッチ自体は一年以上前に作っていたので、バージョン 2 であれば、新しいバージョンでも、古いバージョンのでも動く。


# fetch http://www.ne.jp/asahi/export/uyota/patches/freesbie2-patch-pkg_create
# mv freesbie2-patch-pkg_create /usr/ports/sysutils/freesbie/files/patch-pkg_create

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2007/09/14/1797217/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。