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