Доброго времени суток, хабравчане.
Я уже довольно давно пользуюсь замечательным редактором Komodo Edit (в принципе, можно его отнести даже к IDE). Когда в 2007-2008 году стал использовать Debian в качестве десктопной ОС, то для разработки продолжил использование Komodo Edit, хотя иногда кидался к Eclipse, но как-то окончательно настроив Komodo Edit, успокоился, так как он меня полностью устраивает в качестве IDE для веб-разработки. Примерно в то же время написал bash-скрипт для сборки deb-пакета, так как дружу с пакетной системой Debian'а.
Данный скрипт также имеет help и может быть использован в Ubuntu и других deb-based дистрибутивах.
Собственно, сам скрипт (прошу прощения за использование английского в комментариях к коду, лень переписывать на русские, а для использования это ни к чему):
Ход работы скрипта:
1) парсинг имени архива вида Komodo-Edit-#VERSION-#REVISION-linux-libcpp6-#ARCH.tar.gz откуда получаем всю нужную информацию;
2) распаковка архива во временную папку;
3) установка Komodo Edit туда;
4) прекомпилирование исходников;
5) рассовывание файлов в нужные подпапки;
6) создание control файла;
7) сборка deb-пакета с использованием fakeroot;
Использование:
0) сделать файл со скриптом исполняемым
1) кинуть скрипт (у меня называется mkpkg-komodo) в /usr/local/bin
2) скачать архив с activestate.com
3) запустить скрипт с нужными параметрами (посмотрите help, кому нужно, мне хватает просто имени файла с архивом):
4) установите получившийся deb-пакет:
Можно также добавить в локальный репозиторий, копировать свой топик про создание репозитория не буду, кому интересно, гляньте.
В разделе Разработка (Developement) меню появится пункт Komodo Edit.
Чтобы сделать Komodo Edit более полноценной IDE установите плагин NST
Как это выглядит:
UPD: В принципе, скрипт предупредит вас, если не будут установлены пакеты imagemagick и fakeroot, надо поставить:
Я уже довольно давно пользуюсь замечательным редактором Komodo Edit (в принципе, можно его отнести даже к IDE). Когда в 2007-2008 году стал использовать Debian в качестве десктопной ОС, то для разработки продолжил использование Komodo Edit, хотя иногда кидался к Eclipse, но как-то окончательно настроив Komodo Edit, успокоился, так как он меня полностью устраивает в качестве IDE для веб-разработки. Примерно в то же время написал bash-скрипт для сборки deb-пакета, так как дружу с пакетной системой Debian'а.
Данный скрипт также имеет help и может быть использован в Ubuntu и других deb-based дистрибутивах.
Собственно, сам скрипт (прошу прощения за использование английского в комментариях к коду, лень переписывать на русские, а для использования это ни к чему):
#!/bin/bash
################################################################################
# #
# This script makes Komodo Edit package for Debian #
# #
################################################################################
# backup IFS variable
OLD_IFS=$IFS
UMASK=`umask`
# the archive filename
archive_name=""
# Package version number
VERSION=""
# 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;;
-[a-z]*) options=`expr match "$arg" "\(-[a-z]*\)"`
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
ARCH=${name[6]}
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/
sed -i -e 's/$INSTALLDIR\/lib/$INSTALLDIR\/share\/komodo-edit\/lib/i' $TEMP_BUILD_PATH/$PREFIX/bin/komodo
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/
# Move all libs
mv $TEMP_BUILD_PATH/$PREFIX/lib/* $BUILD_PATH/$PREFIX/share/komodo-edit/lib/
# 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/
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
Ход работы скрипта:
1) парсинг имени архива вида Komodo-Edit-#VERSION-#REVISION-linux-libcpp6-#ARCH.tar.gz откуда получаем всю нужную информацию;
2) распаковка архива во временную папку;
3) установка Komodo Edit туда;
4) прекомпилирование исходников;
5) рассовывание файлов в нужные подпапки;
6) создание control файла;
7) сборка deb-пакета с использованием fakeroot;
Использование:
0) сделать файл со скриптом исполняемым
1) кинуть скрипт (у меня называется mkpkg-komodo) в /usr/local/bin
2) скачать архив с activestate.com
3) запустить скрипт с нужными параметрами (посмотрите help, кому нужно, мне хватает просто имени файла с архивом):
$ mkpkg-komodo Komodo-Edit-6.1.3-8844-linux-libcpp6-x86_64.tar.gz
4) установите получившийся deb-пакет:
# dpkg -i komodo-edit_6.1.3-8844_amd64.deb
Можно также добавить в локальный репозиторий, копировать свой топик про создание репозитория не буду, кому интересно, гляньте.
В разделе Разработка (Developement) меню появится пункт Komodo Edit.
Чтобы сделать Komodo Edit более полноценной IDE установите плагин NST
Как это выглядит:
UPD: В принципе, скрипт предупредит вас, если не будут установлены пакеты imagemagick и fakeroot, надо поставить:
# aptitude install imagemagick fakeroot