Komodo Edit - самостоятельная сборка .deb-пакета

Hужное/полезное 11444 просм. 26 сообщ.


Нашёл в сети скрипт, который собирает вам .deb-пакет для Ubuntu или Debian из скачанного с оф. сафта инсталятора (Komodo-Edit-*.*.*-****-linux-x86.tar.gz).

Годится как для старой ветки (6.*), так и для новой (7.*).

Листинг:

#!/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;;
                            
            -[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
    
    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

Использование скрипта:

- качаете инсталятор в директорию со скриптом;
- запускаете скрипт примерно так:

./Upd.sh -u -m *gz

(ключ -u означает сборку для Ubuntu; по умолчанию пакет собирается для Debian)

- устанавливаете полученный в итоге пакет любым удобным вам способом.

Отличный скрипт ) До сих пор не нарадуюсь, но нагуглил его ) Komodo Edit всё-таки хороший редактор!

vovans:

Komodo Edit всё-таки хороший редактор!

Нунихренасебесказалясамсебе:



Хороший редактор, хороший!

меньше 50 мб весит архив ) он на базе Firefox. На самом деле, достаточно лёгкий и мощный (если можно так сказать) редактор. Почти IDE. И бесплатный! Конечно, если конфиг поправить или текст набрать, он нафик такой красивый не нужен.

Почитал про него маненько... Создалось впечатление что его ценят в основном за то что он полностью поддерживает кирилицу в виндовой кодировке. Но я не программер... Далёк я от этого! Но вес меня впечатлил! :)))

Да, разумеется, такие редакторы для программистов, а не для рядовых пользователей ) Конечно, в Линуксе есть выбор подобных программ, но когда начинаешь искать... Для одних ты недостаточный ещё программист, а другие столь ресурсоёмки, что и задач-то таких для них нет ) Ну и программирование... оно ведь тоже разное... Сколько разных языков... в.т. и скрипторые, и веб (HTML, CSS, JS и т.п. в разных связках - именно связках). Итого, критериев для выбора подходящего именно тебе редактора хватает ) Не vim-ом единым :)

Komodo Edit не такой требовательный к ресурсам, в то же время, им удобно пользоваться и функционал он имеет приличный.

Всё! Уговорил! Начал читать:

шутник )

Я для своих говноподелий на питоне, bash, а так же не совсем говноподелий на js и правки всевозможных конфигов, ebuild и остального всегда юзал geany, и с недавнего времени gvim(тот же vim, но с дополнительными тыкалками).
Вроде и там нормально всё.

Hello first contacted virtualbox and do not understand what to do. Wirth created. machine set Bodhi 1.30 (want a good test it there), but for some reason operating system runs not the entire screen. Right Ctrl + F does not help. how to fix did not understand. : |

wiki.archlinux.org/Virtualbox

Хм.... ну раз пошла такая пьянка... (с)
Аз сам уж хз сколько лет (наверно с середины миллениума точно) всегда и везде, а для скриптового программирования в особенности, юзаю (кросплатформенный кстати) компатный (2-3 мб), но неимоверно мощно развитый (особенно с плагинами) geany. Он есть в бубнтовых репах.
К счастью, его многие майнтайнеры уже и в дистры включают -- он того стоит! :)

Да, geany хорош и лёгок, никто не спорит )

AMA:

К счастью, его многие майнтайнеры уже и в дистры включают -- он того стоит! :)
А какая собственно разница есть в "дефолтной" поставке что то или нет? Мне вот оно совсем пофигу, ведь в том что бы поставить то что нравится нет совершенно ничего сложного...

Позикс, "разница" только в том, что приблуды, включаемые в популярные релизы осей, попадаются на глаза много большему числу юзверья... больше шансов распространения хорошей весчи! ;)

AMA:

больше шансов распространения хорошей весчи
Почти везде напховывают одно и тоже, редко где можно увидеть оригинальный, отличный от "стандартно принятого" состав приложений, даже не учитывая привязку к конкретному окружению. А заинтересовать для "добавки в репу" какой либо безусловно полезной утилиты "подвиг Геракла", по себе знаю, даже уверение "сам буду актуализировать" нифига не прокатывает! Например за всё время существования Salix только пяток софин смог "осутинировать" для попадания в оф.репы. Вот и сейчас, лёгонько и ненавязчиво "проталкиваю" для включения:

Пока без малейшего шанса на успех! Слишком уж это длинная и иезуитски извращённая процедура, за%бывает процесс ещё на начальной стадии (почему и не удивляет меня большое количество форков и модов оригинальных дистров). Зато кучу уже давно морально и функционально устаревшего софта, почти всеми дистрами настырно таскается из релиза в релиз. Никем это не используется, но "по традиции" впихивают, такое происходит стоит даже какому то моду/форку чутка заматереть, про оригинальные дистры уж промолчу...
Ну естественно дело то не моё, кто я такой что бы кому то указывать! Но для меня "популярное" и "хорошая весчь" не всегда одно и тоже. Из "ширпотребных", распиареных приложений мне практически ничего не нравится, если чего и использую то редко, в основном что бы убедится что "это не моё" (естественно не учитывается безальтернативное, навроде Гимпа).

Думаю, добавляют в дистры истинные полезняшки тысызыть "независимые" майнтайнеры и дистрибуторы... типа авторов рунты или особливо коммунити паппика (вкл-но его русской ипостаси)... ну еше минт довольно творчески собран.
Зато офоциоз пингвиностроения озабочен иными весчами...
Так что ваши телодвижения последним... (епитеты замнём для политкорректности! ;))


Добавлено позже:

ЗЫ. ну а вообще-то навскидку -- ваши последние представленные тут инструменты представляются довольно специфическим спец.назначения инстрментарием... не каждому юзверю нужны, значится... :)

AMA:

Так что ваши телодвижения последним... (епитеты замнём для политкорректности! ;))
Лично мне то пофигу, я давно уже мальчик самостоятельный и пакетики себе сам умею собирать. Просто иногда, возникает желание поделится "интересностью", да и самому так было бы удобнее, но... Оказалось что проще скидывать собранное на флешку, или на облачко.

AMA:

спец.назначения инстрментарием... не каждому юзверю нужны, значится... :)
А что в них такого уж сильно специального? Обычные стиратели, только консольные... К тому же, перед темами о ГУИ утилитах, надо бы упомянуть про то на чём они основаны, а то неаккуратненько как то получается! И специального плана у меня нет, на что курсор упал про то и темы делаются, да и в одной из последних тем я уже отписал... Смысл в том что "для всех милашкой не будешь", на вкус и цвет карамельки ведь отличаются от ирисок! :)))

Ну дык к выводу, подобо Вашему, аз пришел еще в лохматых нулевых (ЕМНИС)...
Да и вообще, -- помните поговорку об "утопающих" и чьих-то "руках"? :)
А об утилитах аз гутарил тех, что у Вас тут на скриншотах: ManPageEdit -- етож редактор манов, если конечно верить табличке на вольере слона! (с) Крылов :) Кроме разрабов, кому такой редактор нужен?


Добавлено позже:

ЗЫ, что касается дележки инфой о полезняшках, так Вы на етом сайте етим и заняты, как ето видно на главной странице.
"Чего ж боле?" (с)

AMA:

geany. Он есть в бубнтовых репах.К счастью, его многие майнтайнеры уже и в дистры включают -- он того стоит! :)

AMA:

Кроме разрабов, кому такой редактор нужен?
Qt Linguist тоже не многим то нужен, а его наличие всеми имеется. Это к вопросу про ManPageEdit...
Написать/подправить/перевести Man и отправить его разработчикам своего дистра много приятнее имея под рукой удобный инструмент, даже ленивому и имеющему мало времени! (таких вот, навроде меня) Тем более что делать маны "по старинке" сейчас не все авторы приложений умеют, оставляя информацию только в "README".

AMA:

юзаю (кросплатформенный кстати) компатный (2-3 мб), но неимоверно мощно развитый
Приписывание в плюс софине "кросплатформенность", меня почему то всегда смешит! :)))

Написать ответ…