{{:config:warning.png?nolink&16x16|Внимание}}**Внимание:** данная страница **не** является частью официальной документации. ====== Создание своего RPM-пакета (на примере CentOS 5.4) ====== В корпоративном секторе установка программ вручную крайне нежелательна, вместо этого создают пакет для текущей системы и с его помощью уже устанавливают, обновляют и удаляют нужное ПО. В данной статье [[user>ladserg|я]] приведу пример, как создать свой RPM-пакет для «ДокуВики», в котором определены все необходимые зависимости и начальные настройки. Задача пакета будет состоять в установке ПО, настройке веб-сервера Apache, настройке прав доступа, при желании можно добавить и базовые настройки «ДокуВики». Устанавливать «ДокуВики» по умолчанию будем в каталог ''/opt/dokuwiki''. ===== Отказ от ответственности ===== Предупрежу сразу, во-первых, я в данном вопросе новичок и если кому есть что-то поправить или добавить, то просто добавьте или поправьте. Во-вторых, информацию данной статьи вы используете на свой страх и риск, я не несу ответственность за любой ущерб или урон который вы причините себе и други следуя моим инструкция. --- //[[ladserg@mail.ru|ladserg]] 2010/05/12 05:50// ===== Установка и настройка rpm-build ===== Я не буду подробно описывать технологию создания RPM-пакетов, в сети есть немало руководств на данную тему, написанных умными людьми. Здесь я просто приведу шаги, которые достаточны для того, чтобы начать создавать свои пакеты. Для начала установите пакет rpm-build, запустив в сеансе root’а команду: # yum install rpm-build Зайдите в систему под своим постоянным пользователем, который не имеет привелегированных прав. Допустим его имя: ''user''. Создадим нужные каталоги и поределим нужный макрос: $ mkdir -p ~/workspace/redhat/{RPMS,SRPMS,SPECS,SOURCES,BUILD} $ echo '%_topdir /home/user/workspace/redhat' > ~/.rpmmacros Всё, теперь можно приступать созданию пакета. ===== Подготовка исходников ===== Подготовим исходники для нашего пакета, для этого сначала загрузим в каталог ресурсов: $ cd ~/workspace/redhat/SOURCES/ $ wget -c http://www.splitbrain.org/_media/projects/dokuwiki/dokuwiki-2009-12-25c.tgz Тут же создадим файл настройки каталога для сервера Apache, скажем ''~/workspace/redhat/SOURCES/dokuwiki.conf'', следующего содержания: Alias /dokuwiki/ "/opt/dokuwiki/" AllowOverride None Order allow,deny Allow from all # Если кому не нужна настройка переопределения адресации, # то закоментируйте следующий блок RewriteEngine on RewriteBase /dokuwiki RewriteRule ^_media/(.*) lib/exe/fetch.php?media=$1 [QSA,L] RewriteRule ^_detail/(.*) lib/exe/detail.php?media=$1 [QSA,L] RewriteRule ^_export/([^/]+)/(.*) doku.php?do=export_$1&id=$2 [QSA,L] RewriteRule ^$ doku.php [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) doku.php?id=$1 [QSA,L] RewriteRule ^index.php$ doku.php На этом пока остановимся. ===== Подготовка SPEC-файла ===== В каталоге ''~/workspace/redhat/SPECS/'' создадим файл ''dokuwiki-2009-12-25c.spec'' со следующим содержанием: Name: dokuwiki Version: 20091225c Release: 1 Summary: DokuWiki is a simple to use Wiki aimed at the documentation needs of a small company. Summary(ru): «ДокуВики» — это лёгкая в использовании вики, предназначенная для создания разного рода документации. Group: Applications/Editors License: GPL2 Source0: http://www.splitbrain.org/_media/projects/dokuwiki/dokuwiki-2009-12-25c.tgz Source1: dokuwiki.conf BuildArch: noarch BuildRoot: %{_tmppath}/dokuwiki-root URL: http://www.dokuwiki.org/ Packager: My name Requires: httpd php php-common php-gd php-xml php-xmlrpc Autoreqprov: no %description DokuWiki is a standards compliant, simple to use Wiki, mainly aimed at creating documentation of any kind. It is targeted at developer teams, workgroups and small companies. It has a simple but powerful syntax which makes sure the datafiles remain readable outside the Wiki and eases the creation of structured texts. All data is stored in plain text files – no database is required. %description -l ru «ДокуВики» — это совместимая со стандартами и лёгкая в использовании вики, предназначенная в первую очередь для создания разного рода документации. Она ориентирована на команды разработчиков, рабочие группы и небольшие компании. Все данные хранятся в простых текстовых файлах, поэтому дя работы не требуется СУБД. Простой, но мощный синтаксис облегчает создание структурированных текстов и позволяет при необходимости читать файлы данных даже за пределами вики. %prep #%setup -q -n %{name}-%{version} %setup -q -T -b 0 -n %{name}-2009-12-25 %build mv .htaccess.dist .htaccess %install mkdir -p $RPM_BUILD_ROOT/opt/dokuwiki cp -r . $RPM_BUILD_ROOT/opt/dokuwiki mkdir -p $RPM_BUILD_ROOT/etc/httpd/conf.d cp %SOURCE1 $RPM_BUILD_ROOT/etc/httpd/conf.d/ %files %defattr(-,apache,apache) /opt/dokuwiki %config(noreplace) /etc/httpd/conf.d/dokuwiki.conf %clean rm -rf $RPM_BUILD_ROOT Обратите внимание на кострукции «''Summary(ru)''» и «''%description -l ru''», аналогичным образом вы можете определить краткое и полное описание для других языков. В кратце о том, что делает RPM-пакет, определённый данным SPEC-файлом: создаёт каталог ''/opt/dokuwiki'', копирует туда содержимое официального архива, где файл ''.htaccess.dist'' уже переименован в ''.htaccess''. Так же подбросит веб-серверу Apache файл с настройками каталога нашей вики (в CentOS по умолчанию Apache добавляет к конфигурации все файлы ''/etc/httpd/conf.d/*.conf'', если вы отключили эту возможность или настроили виртуальные домены, то вам придётся изменить и этот пункт подключения каталога). Обратите внимание на аргумент ''noreplace'' у макроса ''%config'', он означает, что данный конфигурационный файл не будет перезаписываться, если он существует. ===== Генерация RPM-пакета ===== Просто выполните команду: $ rpmbuild -ba ~/workspace/redhat/SPECS/dokuwiki-2009-12-25c.spec Если нигде нет никаких ошибок, то в каталоге ''~/workspace/redhat/SRPMS/'' обнаружите файл ''dokuwiki-20091225c-1.src.rpm'', а в каталоге ''~/workspace/redhat/RPMS/noarch/'' будет находиться наш RPM-пакет ''dokuwiki-20091225c-1.noarch.rpm'', в котором уже определены минимально нужные зависимости. ===== RPM-пакет с предопределёнными настройками «ДокуВики» ===== Лень --- двигатель прогресса, чтобы не запускать постоянно ''install.php'', я определил начальные установки для «ДокуВики» и включил их в свой RPM-файл. Начальные настройки у меня таковы: имя суперпользователя: admin пароль суперпользователя: admin стартовая страница: index.html название вики: Wiki Язык: ru лицензия содержимого: GNU Free Documentation License 1.2 уровень доступа: Зарегистрированным - правка, незарегестрированным - только чтение. Заблокировать операции «ДокуВики»: Зарегистрироваться Удобочитаемые адреса (URL): .htaccess Использовать слэш: true И т. д. по мелочи то, что можно в дальнейшем переопределить. Далее я в каталог ''~/workspace/redhat/SOURCES/'' добавил следующие файлы: ''acl.auth.php'': * @ALL 1 * @user 8 ''local.php'': ''users.auth.php'': admin:$1$22b1d2a6$IB1a/6hAXJlKAORCDX7hV0:Admin User:postmaster@localhost:admin,user В SPEC-файле в секции глобальных переменных определил: Source2: acl.auth.php Source3: local.php Source4: users.auth.php В секции ''%build'' добавил следующее: rm -f install.php mkdir -p $RPM_BUILD_ROOT/opt/dokuwiki/conf cp %SOURCE2 $RPM_BUILD_ROOT/opt/dokuwiki/conf/ cp %SOURCE3 $RPM_BUILD_ROOT/opt/dokuwiki/conf/ cp %SOURCE4 $RPM_BUILD_ROOT/opt/dokuwiki/conf/ В секции ''%files'': %config(noreplace) /opt/dokuwiki/conf/acl.auth.php %config(noreplace) /opt/dokuwiki/conf/local.php %config(noreplace) /opt/dokuwiki/conf/users.auth.php И пересобрал пакет: rpmbuild -ba /home/slad/workspace/redhat/SPECS/dokuwiki-2009-12-25c.spec ===== Добавление страниц вики в RPM-пакет ===== Вики с нуля --- это всегда грустно, желающим добавить в RPM-пакет страницу по умолчанию, свои статьи, или просто более подробную документацию по «ДокуВики» достаточно создать нужные страницы с форматированием «ДокуВики» в виде файлов с расширением «txt» и настроить SPEC-файл на копирование данных файлов в соответсвующие подкаталоги каталога ''/opt/dokuwiki/data/pages/''. Приведу пример добавления свой страницы по умолчанию (у меня это ''index.html''). Итак, в каталоге ''~/workspace/redhat/SOURCES'' создадим файл ''index.html.txt'', с нужным вам содержанием, например: Welcome to [[wiki:dokuwiki|DokuWiki]]. В SPEC-файле определим глобальную переменную: Source5: index.html.txt В секцию ''%build'' добавим создание нужного каталога и копирование туда файла: mkdir -p $RPM_BUILD_ROOT/opt/dokuwiki/data/pages/ cp %SOURCE5 $RPM_BUILD_ROOT/opt/dokuwiki/data/pages/ И определим наш файл в секции ''%files'': %config(noreplace) /opt/dokuwiki/data/pages/index.html.txt И пересоберём наш пакет: $ rpmbuild -ba /home/slad/workspace/redhat/SPECS/dokuwiki-2009-12-25c.spec Главное, при добавлении своих страниц в пакет указать, что они не должны перезаписываться, вы же не желаете восстанавливать при каждом обновлении стартовую страницу? ===== Добавление медиафайлов вики (картинок, звуков, видео) в RPM-пакет ===== Здесь всё тоже очень просто, всё абсолютно как в разделе [[#Добавление страниц вики в RPM-пакет]], только целевой каталог другой: ''/opt/dokuwiki/data/media/''. ===== Пример RPM-пакета с плагином для «ДокуВики» ===== Ну раз вы установили «ДокуВики» из RPM-пакета, то не марать же теперь руки ручной установкой плагинов к «ДокуВики», приведу пример SPEC-файла для плагина [[https://www.dokuwiki.org/plugin:include|include]], который я создавал для себя и на базе которого вы сможете создать свой RPM-пакет. ''dokuwiki-include-20091127.spec'': %define pluginname include Name: dokuwiki-%{pluginname} Version: 20091127 Release: 1 Summary: Include another wiki page into the current one. (previous authors: Esther Brunner) Group: Applications/Editors License: GPL2 Source0: http://cloud.github.com/downloads/dokufreaks/plugin-include/plugin-include.tgz Source1: include.txt BuildArch: noarch BuildRoot: %{_tmppath}/dokuwiki-%{pluginname}-root URL: http://www.dokuwiki.org/plugin:%{pluginname} Packager: Serg Alex Lad Requires: dokuwiki Autoreqprov: no %description This is a handy plugin with which you can include another wiki page into the current one. %prep #%setup -q -n %{name}-%{version} %setup -q -T -b 0 -n %{pluginname} %build %install find ./ -type d -exec chmod 0775 \{\} + find ./ -type f -exec chmod 0664 \{\} + mkdir -p $RPM_BUILD_ROOT/opt/dokuwiki/lib/plugins/%{pluginname} cp -r . $RPM_BUILD_ROOT/opt/dokuwiki/lib/plugins/%{pluginname} mkdir -p $RPM_BUILD_ROOT/opt/dokuwiki/data/pages/wiki/plugin cp %SOURCE1 $RPM_BUILD_ROOT/opt/dokuwiki/data/pages/wiki/plugin/ %files %defattr(-,apache,apache) /opt/dokuwiki/lib/plugins/%{pluginname} %config(noreplace) /opt/dokuwiki/data/pages/wiki/plugin/include.txt %clean rm -rf $RPM_BUILD_ROOT В файл ''include.txt'' я просто скопировал описание с синтаксисом плагина на его страничке, если вам этого не надо, можете просто это удалить. Как видите, создать RPM-пакет для плагина - не трудно. Скопировать исходник в соответствующий каталог, скопировать текст из SPEC-файла другого плагина, изменить значение переменной ''pluginname'', версию плагина, описание, ну, и по мелочи (не забудьте удалить или изменить описание добавления справки по плагину).