Показаны сообщения с ярлыком deb. Показать все сообщения
Показаны сообщения с ярлыком deb. Показать все сообщения

воскресенье, 18 августа 2019 г.

Сборка плагинов и тем Wordpress в deb-пакеты

Как я уже говорил, я предпочитаю устанавливать программное обеспечение в систему с использованием системного пакетного менеджера. В простейших случаях пакеты можно собирать, формируя файлы и каталоги, образующие структуру, которую понимает команда dpkg-deb, формирующая двоичные пакеты. Команды, формирующие необходимую структуру каталогов и вызывающие dpkg-deb, можно оформить в виде скрипта. В некоторых случаях такой скрипт удаётся обобщить для сборки ряда однотипных приложений.

Например, плагины и темы на официальном сайте wordpress располагаются по ссылкам вполне предсказуемого формата. Благодаря этому, возможно обобщить скрипт сборки deb-пакетов с плагинами и темами для Wordpress. Получившийся скрипт оказывается способен собирать deb-пакеты с любыми плагинами и темами, имеющимися на официальном сайте:
#!/bin/sh

build()
{
TYPE="$1"
NAME="$2"
VERSION="$3"
DEPENDS="$4" || ""

if [ -n "$DEPENDS" ]
then
  DEPENDS=", $DEPENDS"
fi

case "$TYPE" in
  plugin)
    PACKAGE="wordpress-$NAME"
    ;;

  theme)
    PACKAGE="wordpress-theme-$NAME"
    ;;

  *)
    echo "$TYPE $NAME $VERSION: Unknown type"
    return 2
    ;;
esac

DIR="${PACKAGE}_${VERSION}"

wget --quiet https://downloads.wordpress.org/$TYPE/$NAME.$VERSION.zip 2>/dev/null \
  || wget --quiet https://downloads.wordpress.org/$TYPE/$NAME.zip 2>/dev/null \
  || (echo "$TYPE $NAME $VERSION: Failed to download ZIP-file" >/dev/stderr && return 1)

unzip -q $NAME.$VERSION.zip 2>/dev/null \
  || unzip -q $NAME.zip 2>/dev/null \
  || (echo "$TYPE $NAME $VERSION: Failed to unpack ZIP-file" > /dev/stderr && return 1)

rm $NAME.$VERSION.zip 2>/dev/null || rm $NAME.zip

mkdir -p $DIR/DEBIAN

# Формируем описание пакета
cat - > $DIR/DEBIAN/control <<END
Package: $PACKAGE
Version: $VERSION
Architecture: all
Depends: wordpress$DEPENDS
Maintainer: Vladimir Stupin <vladimir@stupin.su>
Description: $NAME $TYPE for Wordpress
 $NAME $TYPE for Wordpress
 Homepage: https://wordpress.org/${TYPE}s/$NAME/
END

chmod 755 $DIR/DEBIAN/control

cat - > $DIR/DEBIAN/postinst <<END
#!/bin/sh
# postinst script for Wordpress $TYPE $NAME

set -e

# summary of how this script can be called:
#        * <postinst> \`configure' <most-recently-configured-version>
#        * <old-postinst> \`abort-upgrade' <new version>
#        * <conflictor's-postinst> \`abort-remove' \`in-favour' <package>
#          <new-version>
#        * <deconfigured's-postinst> \`abort-deconfigure' \`in-favour'
#          <failed-install-package> <version> \`removing'
#          <conflicting-package> <version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package

case "\$1" in
  configure)
        # Change permissions to application files
        if ! dpkg-statoverride --list /usr/share/wordpress/wp-content/${TYPE}s/$NAME >/dev/null; then
                chown -R root:root /usr/share/wordpress/wp-content/${TYPE}s/$NAME
                chmod 755 /usr/share/wordpress/wp-content/${TYPE}s/$NAME
                find /usr/share/wordpress/wp-content/${TYPE}s/$NAME -type d | xargs chmod 755
                find /usr/share/wordpress/wp-content/${TYPE}s/$NAME -type f | xargs chmod 644
        fi
  ;;
  abort-upgrade|abort-remove|abort-deconfigure)
  ;;
  *)
    echo "postinst called with unknown argument \\\`\$1'" >&2
    exit 1
  ;;
esac
END

chmod 0755 $DIR/DEBIAN/postinst

# Формируем содержимое пакета
mkdir -p $DIR/usr/share/wordpress/wp-content/${TYPE}s/
cp -R $NAME $DIR/usr/share/wordpress/wp-content/${TYPE}s/
rm -R $NAME

FILE=${PACKAGE}_${VERSION}_all.deb

# Формируем пакет
dpkg-deb -b $DIR $FILE >/dev/null 2>&1
rm -R $DIR

echo "$TYPE $NAME $VERSION: OK"
return 0
}

build plugin simple-ldap-login 1.6.0 php-ldap
build theme period 1.270
build plugin the-events-calendar 4.2.7
build plugin wise-chat 2.7
build plugin site-sticky-notes 1.1.0
build plugin so-widgets-bundle 1.9.10
Скрипт состоит из одной функции, которая собственно и занимается сборкой пакета, и вызовов этой функции для сборки нескольких плагинов и тем. Скрипт использует для работы утилиты wget, unzip и dpkg-deb. При отсутствии в системе wget или unzip, их можно установить из одноимённых пакетов.

В скрипте выше указаны версии плагинов, работающие с Wordpress версии 3.6. У плагина simple-ldap-login указана также дополнительная зависимость - пакет php-ldap. Вы можете указать в скрипте свой список плагинов и тем, указав их версии и дополнительные зависимости. При необходимости указать несколько зависимостей, нужно перечислить их через запятую и заключить в кавычки.

воскресенье, 6 октября 2013 г.

Создание deb-пакетов для модулей Python

Во одной из своих прошлых заметок, Шаблоны HTML::Template в Perl-фреймворке Dancer, я упомянул о том, как можно установить в систему Perl-модуль, которого нет в репозиториях, не засоряя систему. Команда dh-make-perl позволяет скачать произвольный Perl-модуль с CPAN и упаковать его в deb-пакет.

Теперь у меня возникло аналогичное желание для Python-модуля. В репозитории Debian нет модуля grab. Я не хотел прибегать к помощи python-virtualenv (подобный же инструмент существует и для Perl - пакет perlbrew в Debian и модуль App::perlbrew на CPAN), а захотел собрать deb-пакет для установки в систему.

Как оказалось, такой инструмент существует (хоть он и менее удобен по сравнению с dh-make-perl) и называется он stdeb. Он уже имеется в репозитории Debian, поэтому задача Мюнхгаузена - вытянуть себя за собственные шнурки - перед нами не стоит. Ставим пакеты stdeb и python-all:
# apt-get install stdeb python-all
Теперь находим архив с нужным нам модулем на pypi.python.org и скачиваем его себе:
$ wget https://pypi.python.org/packages/source/g/grab/grab-0.4.12.tar.gz#md5=a9d42f6db9f96357d18fe170176c95b4
Теперь можно заглянуть в документацию на stdeb и посмотреть, как это делается.

Распакуем скачанный архив:
$ tar xzvf grab-0.4.12.tar.gz
Перейдём в каталог с распакованным модулем:
$ cd grab-0.4.12
Подготовим каталог и управляющие файлы для сборки пакета:
$ python setup.py --command-packages=stdeb.command sdist_dsc
Теперь перейдём в этот каталог и соберём пакет:
$ cd deb_dist/grab-0.4.12
$ dpkg-buildpackage -us -uc -rfakeroot
В каталоге выше появится готовый deb-пакет, который можно установить в систему.
# dpkg -i python-grab_0.4.12-1_all.deb

Ссылки:
1. Документация на stdeb
2. Заметка об использовании Perlbrew
3. Python. Строим виртуальное окружение с помощью virtualenv

воскресенье, 7 июня 2009 г.

deb-пакеты с плагинами и темой для Wordpress

Тем же способом, который был описан в статье deb-пакет: тема arctic для dokuwiki собрал два deb-пакета с плагинами и один deb-пакет с темой для WordPress:
wordpress-plugin-fckeditor-2.5.0_all.deb - редактор FCKEditor, без которого не будет работать следующий плагин,
wordpress-plugin-multilingual-1.3.4.15_all.deb - локализация Wordpress для 14 языков, в том числе для русского,
wordpress-theme-fluid-blue-1.7.1ru_all.deb - приятная "резиновая" тема.

пятница, 26 декабря 2008 г.

deb-пакет: тема arctic для dokuwiki

Воспользовавшись краткой статьёй по ссылке Как мне сделать собственный .deb пакет? и информацией из man deb-control собрал deb-пакет с темой arctic для dokuwiki. Возможно криво. Можно взять здесь: dokuwiki-arctic-theme_0.0.20081104_all.deb