Komodo Edit:更新されたdebパッケージビルドスクリプト

こんにちは、さほど前ではありませんが、 Komodo Editの debパッケージを作成するスクリプトを含む記事を書きまし

Komodo Edit 7.0の新バージョンでは、アーカイブの名前(必要な情報の出所)と起動バイナリの場所にいくつかの変更が加えられたため、debパッケージをビルドするためにスクリプトを書き直す必要がありました。



バージョン7.0とも互換性のあるcat更新スクリプトの下



スクリプトは次のようになります。

#!/bin/bash ################################################################################ # # # This script makes Komodo Edit package for Debian and Ubuntu # # # ################################################################################ # backup IFS variable OLD_IFS=$IFS UMASK=`umask` # the archive filename archive_name="" # Package version number VERSION="" # Installer version I_VER=6 # Package revision number REVISION="" # package Architecture ARCH="" # Where we are now :) FULL_PATH=`pwd` # temporary subfolder TEMP_PATH="temp-komodo-pkg" # Full extract path EXTR_PATH=$FULL_PATH/$TEMP_PATH # Installation script SCRIPT="install.sh" # temporary installation path TEMP_BUILD_PATH="$EXTR_PATH/temp-build" # real installation path BUILD_PATH="$EXTR_PATH/build" # installation prefix PREFIX=usr # delete temporary files opt_del_temp="1" # Make submenu Komodo Edit in Development Menu opt_submenu="" # Size for Pixmaps Icon pixmaps_size="48x48" # show script usage usage() { cat << EOF Usage: `basename $0` [options] [filename] This script makes Debian/Ubuntu package for Komodo Edit. The filename is Komodo Edit tar.gz-file. Options: -h | --help View this message -u Make Ubuntu package (by default packaging for Debain) -m Make menu subfolder entry -s Save temporary files (temp-komodo-pkg folder) EOF } # options parser for check_args function option_parse() { # Unexpected argument? arg=`expr match "$1" ".*\([^-hums]\)"` if [ -n "$arg" ]; then echo "There is unexpected option specified. Exit." usage exit 2 fi # SHow help? arg=`expr match "$1" ".*\([h]\)"` if [ -n "$arg" ]; then usage exit 0 fi # Save temprary? arg=`expr match "$1" ".*\([s]\)"` if [ -n "$arg" ]; then opt_del_temp="" fi # Submenu for Komodo? arg=`expr match "$1" ".*\([m]\)"` if [ `expr match "$1" ".*\([m]\)"` ]; then opt_submenu="1" fi # Ubuntu package? arg=`expr match "$1" ".*\([u]\)"` if [ -n "$arg" ]; then PREFIX=usr/local REVISION="-ubuntu0" fi } # check input arguments check_args() { if [ -z "$1" ]; then echo "There is no arguments specified. Exit." usage exit 1 fi for arg in $@ do case $arg in --help) option_parse -h;; -[az]*) options=`expr match "$arg" "\(-[az]*\)"` option_parse $options;; *) options=`expr match "$arg" "\(.*\.tar\.gz\)"` if [ -z "$options" ]; then echo "There is unexpected argument \"$arg\" specified. Exit." usage exit 2 elif [ -f "$options" ]; then if [ -n "$archive_name" ]; then echo "Too many filenames specified. Exit." usage exit 3 fi archive_name=$options else echo "The specified argument \"$options\" is not a file. Exit." usage exit 4 fi;; esac done } # check the system functionality check_funcs() { CONVERTER=`which convert` echo -n "Checking for image converter ..." if [ -z "$CONVERTER" ]; then echo "Error" echo "Please install converter for images (can be found in package imagemagick). Exit." exit 5 fi echo "Found" FAKEROOT=`which fakeroot` echo -n "Checking for fakeroot ..." if [ -z "$FAKEROOT" ]; then echo "Error" echo "Please install package fakeroot. Exit." exit 5 fi echo "Found" } # Package name parser package_name_parse() { if [ -z "$1" ]; then echo "There is no Komodo Edit archive file specified. Exit." usage exit 6 else echo "The specified file \"$1\" found." fi name=`basename $1` IFS="-" name=( $name ) VERSION=${name[2]} REVISION=${name[3]}$REVISION IFS="." VERSION_ARR=( $VERSION ) VERSION_ARR=${VERSION_ARR[0]} if [ $VERSION_ARR -gt 6 ]; then I_VER=7 fi # get arch based on installer version case "$I_VER" in 7) ARCH=${name[5]};; *) ARCH=${name[6]};; esac IFS="." ARCH=( $ARCH ) ARCH=${ARCH[0]} # restore IFS variable IFS=$OLD_IFS if [ "$ARCH" == "x86" ]; then ARCH="i386" elif [ "$ARCH" == "x86_64" ]; then ARCH="amd64" fi echo "Version: $VERSION" echo "Revision: $REVISION" echo "Architecture: $ARCH" } unpack_archive() { umask 022 echo -n "Clean old temporary files ..." rm -rf $EXTR_PATH mkdir $EXTR_PATH echo "Done" echo -n "Unpack Komodo Edit tarball file to $EXTR_PATH ..." tar -xvf $1 -C $EXTR_PATH > /dev/null if [ "$?" != 0 ]; then umask $UMASK exit 5 fi echo "Done" SCRIPT=$EXTR_PATH/`ls $EXTR_PATH`/$SCRIPT mkdir "$TEMP_BUILD_PATH" mkdir "$BUILD_PATH" umask $UMASK } install_komodo() { umask 022 $SCRIPT -I "$TEMP_BUILD_PATH/$PREFIX" -s umask $UMASK } # precompile some python scripts at lib/mozilla subfolder # and change start komodo script prepare_komodo() { umask 022 echo "Preparing Komodo scripts ..." $TEMP_BUILD_PATH/$PREFIX/lib/python/bin/python -O -mcompileall $TEMP_BUILD_PATH/$PREFIX/lib/mozilla/ case "$I_VER" in 7) ;; #nothing to do in new algorithm *) sed -i -e 's/$INSTALLDIR\/lib/$INSTALLDIR\/share\/komodo-edit\/lib/i' $TEMP_BUILD_PATH/$PREFIX/bin/komodo;; esac echo "Scripts preparing done." umask $UMASK } mv_package_files() { umask 022 mkdir -p $BUILD_PATH/$PREFIX/bin mkdir -p $BUILD_PATH/$PREFIX/share/komodo-edit/lib mkdir -p $BUILD_PATH/$PREFIX/share/komodo-edit/doc echo -n "Moving files for package. Please wait ..." # Move main script mv $TEMP_BUILD_PATH/$PREFIX/bin/* $BUILD_PATH/$PREFIX/bin/ case "$I_VER" in 7) # create new symlink rm -f $BUILD_PATH/$PREFIX/bin/komodo ln -s ../share/komodo-edit/lib/mozilla/komodo $BUILD_PATH/$PREFIX/bin/komodo # move docs mv $TEMP_BUILD_PATH/$PREFIX/share/doc $BUILD_PATH/$PREFIX/share/komodo-edit/doc/ ;; *) # move docs mv $TEMP_BUILD_PATH/$PREFIX/share/doc/* $BUILD_PATH/$PREFIX/share/komodo-edit/doc/ mv $TEMP_BUILD_PATH/$PREFIX/share/doc/.css $BUILD_PATH/$PREFIX/share/komodo-edit/doc/ ;; esac # Move all libs mv $TEMP_BUILD_PATH/$PREFIX/lib/* $BUILD_PATH/$PREFIX/share/komodo-edit/lib/ echo "Done" umask $UMASK } make_icons() { umask 022 echo -n "Creating icons ..." SIZES="64x64 48x48 32x32 24x24 22x22 16x16" mkdir -p $BUILD_PATH/$PREFIX/share/icons/hicolor/128x128/apps cp -p $TEMP_BUILD_PATH/$PREFIX/share/icons/komodo128.png $BUILD_PATH/$PREFIX/share/icons/hicolor/128x128/apps/komodo.png WORK_PATH=$BUILD_PATH/$PREFIX/share/icons/hicolor for size in $SIZES do mkdir -p $WORK_PATH/$size/apps $CONVERTER $WORK_PATH/128x128/apps/komodo.png -resize $size $WORK_PATH/$size/apps/komodo.png done mkdir -p $BUILD_PATH/usr/share/pixmaps cp $BUILD_PATH/$PREFIX/share/icons/hicolor/$pixmaps_size/apps/komodo.png $BUILD_PATH/usr/share/pixmaps/ echo "Done" umask $UMASK } make_menu_entries() { umask 022 echo -n "Make menu entries ..." mkdir -p $BUILD_PATH/usr/share/menu filename=$BUILD_PATH/usr/share/menu/komodo-edit echo "?package(komodo-edit):needs=\"x11\" section=\"Apps/Programming\" \ " > $filename echo " title=\"Komodo Edit\" command=\"/$PREFIX/bin/komodo %F\" \ " >> $filename echo " icon=\"/usr/share/pixmaps/komodo.png\" " >> $filename echo "" >> $filename if [ -z "$opt_submenu" ]; then echo "Done" category="Development;" depends="" umask $UMASK return fi category="Komodo;" depends="xdg-utils" mkdir -p $BUILD_PATH/etc/xdg/menus/applications-merged filename=$BUILD_PATH/etc/xdg/menus/applications-merged/komodo-edit.menu echo '<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"' > $filename echo '"http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">' >> $filename echo '<Menu>' >> $filename echo ' <Name>Applications</Name>' >> $filename echo ' <Menu>' >> $filename echo ' <Name>Development</Name>' >> $filename echo ' <Menu>' >> $filename echo ' <Name>Komodo</Name>' >> $filename echo ' <Directory>komodoedit.directory</Directory>' >> $filename echo ' <Include>' >> $filename echo ' <Category>Komodo</Category>' >> $filename echo ' </Include>' >> $filename echo ' </Menu>' >> $filename echo ' </Menu>' >> $filename echo '</Menu>' >> $filename mkdir -p $BUILD_PATH/usr/share/desktop-directories filename=$BUILD_PATH/usr/share/desktop-directories/komodoedit.directory echo '[Desktop Entry]' > $filename echo 'Encoding=UTF-8' >> $filename echo 'Type=Directory' >> $filename echo 'Name=Komodo Edit' >> $filename echo 'Icon=komodo' >> $filename echo "Done" umask $UMASK } make_desktop_files() { umask 022 echo -n "Make desktop files ..." mkdir -p $BUILD_PATH/usr/share/applications filename=$BUILD_PATH/usr/share/applications/komodo-edit.desktop echo '[Desktop Entry]' > $filename echo 'Type=Application' >> $filename echo 'Name=Komodo Edit' >> $filename echo 'Encoding=UTF-8' >> $filename echo 'Icon=komodo' >> $filename echo 'Exec=komodo %F' >> $filename echo "Categories=$category" >> $filename echo 'Terminal=false' >> $filename echo 'Comment=Dynamic Languages Web-Editor' >> $filename echo 'GenericName=Dynamic Web-pages Editor' >> $filename if [ -z "$opt_submenu" ]; then echo "Done" umask $UMASK return fi filename=$BUILD_PATH/usr/share/applications/komodo-license.desktop echo '[Desktop Entry]' > $filename echo 'Type=Application' >> $filename echo 'Name=License' >> $filename echo 'Encoding=UTF-8' >> $filename echo 'Icon=txt' >> $filename echo "Exec=xdg-open /$PREFIX/share/komodo-edit/doc/license.txt" >> $filename echo "Categories=$category" >> $filename echo 'Terminal=false' >> $filename filename=$BUILD_PATH/usr/share/applications/komodo-relnotes.desktop echo '[Desktop Entry]' > $filename echo 'Type=Application' >> $filename echo 'Name=Release Notes' >> $filename echo 'Encoding=UTF-8' >> $filename echo 'Icon=html' >> $filename echo "Exec=xdg-open /$PREFIX/share/komodo-edit/doc/relnotes.html" >> $filename echo "Categories=$category" >> $filename echo 'Terminal=false' >> $filename echo "Done" umask $UMASK } make_control_file() { umask 022 echo -n "Make Debian control file ..." mkdir -p $BUILD_PATH/DEBIAN #calculate installed size full_size=`du -s $BUILD_PATH/usr | awk '{print $1}'` filename=$BUILD_PATH/DEBIAN/control echo "Package: komodo-edit" > $filename echo "Version: $VERSION-$REVISION" >> $filename echo "Architecture: $ARCH" >> $filename echo "Section: web" >> $filename echo "Priority: optional" >> $filename echo "Installed-Size: $full_size" >> $filename if [ -n "$depends" ]; then echo "Depends: $depends" >> $filename fi echo "Homepage: www.activestate.com" >> $filename echo "Maintainer: KernelPanic :) <admin@localhost>" >> $filename echo "Description: Komodo Edit is a free, open source editor from dynamic language experts." >> $filename echo " Komodo Edit, based on the award-winning Komodo IDE, offers sophisticated support" >> $filename echo " for all major scripting languages, including in-depth autocomplete and calltips, " >> $filename echo " multi-language file support, syntax coloring and syntax checking, Vi emulation, " >> $filename echo " Emacs key bindings." >> $filename echo " It provides dynamic language expertise for Perl, PHP, Python, Ruby, and Tcl, plus JavaScript, " >> $filename echo " CSS, HTML, and XML, and template languages like RHTML, Template-Toolkit, HTML-Smarty " >> $filename echo " and Django." >> $filename echo "Done" umask $UMASK } make_package() { fakeroot dpkg-deb -b $BUILD_PATH ./ } del_temporary() { if [ -n "$opt_del_temp" ]; then echo -n "Delete temporary files and directories ..." rm -rf $EXTR_PATH echo "Done" else rm -rf $TEMP_BUILD_PATH echo "Temporary files may be found at temp-komodo-pkg/ folder" fi } check_args $@ package_name_parse $archive_name check_funcs unpack_archive $archive_name install_komodo prepare_komodo mv_package_files make_icons make_menu_entries make_desktop_files make_control_file make_package del_temporary echo "All Done. Package is ready :)" exit 0
      
      







影響を受ける機能の変更:

-package_name_parse;

-prepare_komodo;

-mv_package_files。

また、新しい変数「インストーラーバージョン」I_VERが追加されました。



評判の良い(皮肉な) ケケのコメントに導かれている人のためのUPD:

1)誰かがソースコードからのパッケージのアセンブリが何を構成しているのか理解していない場合、「-」を無意識に乱雑にしないでください。

2)誰かがスクリプトとdebian-wayの違いを理解していない場合は、「-」をクリックしてください。



パッケージを構築し、debソースを作成するためのルールに精通しています。この場合、次のようなものを作成します。

1)目標が異なるため、あまり意味がありません。

2)エンドユーザーにとっては不便であり、debソースを操作する機能と正確に関連しています。



All Articles