Как я уже говорил, я предпочитаю устанавливать программное обеспечение в систему с использованием системного пакетного менеджера. В простейших случаях пакеты можно собирать, формируя файлы и каталоги, образующие структуру, которую понимает команда 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. Вы можете указать в скрипте свой список плагинов и тем, указав их версии и дополнительные зависимости. При необходимости указать несколько зависимостей, нужно перечислить их через запятую и заключить в кавычки.