Инструменты пользователя

Инструменты сайта

  • Показать исходный текст
  • История страницы
  • Ссылки сюда
  • Оставить на чай
  • Экспорт в PDF
  • Наверх

  • wiki:install:createrpm

    Это старая версия документа!


    ВниманиеВнимание: данная страница не является частью официальной документации.

    Создание своего RPM-пакета (на примере CentOS 5.4)

    В корпоративном секторе установка программ вручную крайне нежелательна, вместо этого создают пакет для текущей системы и с его помощью уже устанавливают, обновляют и удаляют нужное ПО.

    В данной статье я приведу пример, как создать свой RPM-пакет для «ДокуВики», в котором определены все необходимые зависимости и начальные настройки. Задача пакета будет состоять в установке ПО, настройке веб-сервера Apache, настройке прав доступа, при желании можно добавить и базовые настройки «ДокуВики». Устанавливать «ДокуВики» по умолчанию будем в каталог /opt/dokuwiki.

    Отказ от ответственности

    Предупрежу сразу, во-первых, я в данном вопросе новичок и если кому есть что-то поправить или добавить, то просто добавьте или поправьте. Во-вторых, информацию данной статьи вы используете на свой страх и риск, я не несу ответственность за любой ущерб или урон который вы причините себе и други следуя моим инструкция. — 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/"
    
    <Directory "/opt/dokuwiki/">
        AllowOverride None
        Order allow,deny
        Allow from all
        # Если кому не нужна настройка переопределения адресации,
        # то закоментируйте следующий блок
        <IfModule rewrite_module>
            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
        </IfModule>
    </Directory>

    На этом пока остановимся.

    Подготовка 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 <my@email.dom>
    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:

    <?php
    $conf['title'] = 'Wiki';
    $conf['start'] = 'index.html';
    $conf['lang'] = 'ru';
    $conf['license'] = 'gnufdl';
    $conf['camelcase'] = 1;
    $conf['useacl'] = 1;
    $conf['superuser'] = '@admin';
    $conf['disableactions'] = 'register';
    $conf['sneaky_index'] = 1;
    $conf['xmlrpc'] = 1;
    $conf['subscribers'] = 1;
    $conf['updatecheck'] = 0;
    $conf['userewrite'] = '1';
    $conf['useslash'] = 1;
    $conf['gzip_output'] = 1;
    $conf['compression'] = 'bz2';

    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-файла для плагина 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 <ladserg@mail.ru>
    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, версию плагина, описание, ну, и по мелочи (не забудьте удалить или изменить описание добавления справки по плагину).

    Только авторизованные участники могут оставлять комментарии.
    wiki/install/createrpm.1723673804.txt.gz · Последнее изменение: 2024/08/15 01:16 — vladpolskiy