Мне нужен мой файл правил Debian, чтобы просто копировать файлы в его цель

У меня есть большой проект, в котором у нас есть следующие файлы:

  • Несколько сторонних предварительно скомпилированных двоичных файлов
  • Наши собственные двоичные файлы
  • коллекция Ruby-скриптов
  • Крупный проект Ruby on Rails

Этот продукт будет установлен на оборудовании, которое уже выбрал мой работодатель, используя Ubuntu Linux (Lucid) в качестве целевой ОС, с нашей целью распространять архив в виде пакета Debian для упрощения установки и обновления. Кроме того, у нас есть несколько шаблонов ERB, которые нам нужно «заполнить» соответствующими значениями для каждого клиента, поэтому использование сценария postinst будет особенно удобным для наших целей.

В качестве примечания: пакеты Debian будут храниться в серверном репозитории, которым мы управляем сами.

На этом этапе я использовал dh_make для создания каталога Debian и связанных файлов (например, правил, элементов управления и т. д.), но сгенерированный файл правил кажется излишним для моих целей.

Основываясь на этом описании, все, что мне действительно нужно, чтобы файл "rules" делал, это просто копировать файлы из исходного каталога (или внутри архива) в целевые каталоги, показанные ниже:

/opt/company_product/3rd_party_binaries/bin
/opt/company_product/3rd_party_binaries/etc
/opt/company_product/in_hourse_binaries/bin
/opt/company_product/in_hourse_binaries/etc
/opt/company_product/ruby
/opt/company_product/rails_project
/opt/company_product/etc
/opt/company_product/shared/logs
/opt/company_product/shared/tmp
/opt/company_product/shared/license

...и так далее.

Я прочитал Руководство по политике Debian и несколько инструкций, в которых указано, что вы не должны изменять файл правил, чтобы использовать mkdir для создания каталогов, и обычно существует приложение dh_ (например, dh_installdirs и др.), которые могут удовлетворить ваши потребности практически для любых целей установки. Справочные страницы для этих приложений, связанных с dh_, в лучшем случае поверхностны, а я являюсь "примером".

Тем не менее, я немного не понимаю, как лучше всего получить мой файл rules для установки моих различных предварительно скомпилированных двоичных файлов и текстовых файлов Ruby/Rails в нужные места.

Вот мой исходный файл rules. Это в значительной степени стандартный шаблонный файл правил, который создает dh_make. Я думаю, что я должен закомментировать все разделы, кроме install, а затем найти соответствующие команды для создания каталогов, копирования файлов и т. д. в этом разделе.

Любые советы или предложения приветствуются.

#!/usr/bin/make -f

package = testapp

CC = gcc
CFLAGS = -g -Wall

ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
  CFLAGS += -O2
endif

#export DH_VERBOSE=1

clean:
        dh_testdir
        dh_clean
        rm -f build

install: build
        dh_clean
        dh_installdirs
        echo "Place the Install Script here"
        cp $(CURDIR)/testapp-2.0.tar.gz $(CURDIR)/debian/$(package)/opt/testapp-2.0
        echo "Finished copying folders"


build:
        touch build

binary-indep: install
# There are no architecture-independent files to be uploaded
# generated by this package.  If there were any they would be
# made here.

binary-arch: install
        dh_testdir -a
        dh_testroot -a
        dh_installdocs -a 
        dh_installchangelogs -a 
        dh_strip -a
        dh_compress -a
        dh_fixperms -a
        dh_installdeb -a
        dh_shlibdeps -a
        dh_gencontrol -a
        dh_md5sums -a
        dh_builddeb -a

binary: binary-indep binary-arch

.PHONY: binary binary-arch binary-indep clean checkroot

person Chip Castle    schedule 09.07.2010    source источник


Ответы (2)


Хотя у вас уже есть свой ответ, я укажу на пару вещей.

Вы, кажется, делаете это очень сложным образом. Если вам просто нужно скопировать файлы в определенные каталоги, напишите debian/mypackagename.install в следующем формате:

path/to/file/relative/to/source/root path/to/install/relative/to/system/root

(не добавляйте / перед /usr, или /opt, или любым другим вашим целевым каталогом. Прочтите man dh_install для получения дополнительной информации)

Тогда ваш debian/rules может быть:

#!/usr/bin/make -f

%:
    dh $@

Если у вас есть какой-то make-файл и т. д. в корневом каталоге исходного кода, добавьте его к указанному выше файлу rules:

override_dh_auto_build:

override_dh_auto_install:

Не забудьте поставить 7 в debian/compat.

Кроме того, вы не должны устанавливать файлы в /opt/ или /usr/local/ и т. д. Они предназначены для файлов, не установленных пакетами Debian. Debian рекомендует устанавливать в /usr/share/yourcompany/. Как juzzlin указывает ниже, Центр программного обеспечения Ubuntu может иметь другие требования.

В частности, ваш файл mypackage.install должен выглядеть так:

src/bin/* usr/bin
src/etc/* etc/
person Umang    schedule 10.07.2010
comment
Отличные предложения. После того, как я это сделаю, какую команду я должен использовать для сборки пакета deb? - person Chip Castle; 12.07.2010
comment
хорошо, я запустил dpkg-buildpackage и получил файл .deb, но когда я устанавливаю его на целевой сервер, он не запускает мой файл debian/mypackagename.install. Кроме того, если у меня есть скрипты, которые идут под init.d, куда мне их поместить? - person Chip Castle; 13.07.2010
comment
Вот моя структура каталогов: build_deploy.rb build_package.rb debian docs extras Rakefile src test.txt. Под src находится следующее: bin console created_vipre.sql etc filter install.rb opt spf transport. Все, что я хочу, это иметь файл .deb, содержащий все, что находится в src. Затем я хочу, чтобы именно эта структура была скопирована в /opt/vipre в целевой системе. Затем я хочу, чтобы все в src/etc/init.d было скопировано в /etc/init.d. Я не уверен, почему я не могу получить это. Это кажется простым, но документы меня смущают. Пожалуйста помоги. Большое спасибо. - person Chip Castle; 13.07.2010
comment
По сути, debhelper делает то, что, если он не знает, как установить (у нас нет системы сборки, такой как makefile или distutils Python, если мы знаем, мы переопределяем ее, как указано выше), он читает debian/mypackage.install и dh_install затем помещает исходные файлы в целевой временный каталог (с которым создается .deb). Так что вашему debian/mypackage.install должен понравиться тот, который я собираюсь добавить в отредактированный ответ. Вы можете запустить debbuild для создания пакета. Как правило, это сделать проще. - person Umang; 13.07.2010
comment
Посмотрите на пример, который я привел в ответ, и дайте мне знать, есть ли у вас какие-либо проблемы с ним. Если вы хотите проверить, все ли выглядит так, как вы хотите, вы можете открыть свой .deb с помощью gdebi, а затем проверить раздел файлов, которые будет установлен пакет. Убедитесь, что это так, как вы хотите. Если это не так, либо у вас, либо у меня что-то не так. Если ему не нравится, что foobar.install анализируется, вам следует попробовать добавить цели override_dh_auto* в ваш файл правил, который я разместил выше. - person Umang; 13.07.2010
comment
Я внес запрошенные вами изменения и получил пакет deb. Я использовал dupload, чтобы отправить его на свой сервер на ec2, который отлично работал с первой попытки. При последующих загрузках сообщалось об этой ошибке: Нечего загружать. Я использую reprepro для управления репозиторием Debian. Какие-либо предложения? - person Chip Castle; 13.07.2010
comment
Сейчас я вручную удаляю каталог db, который reprepro создает на сервере ec2, чтобы проверить установку пакета. На целевой машине sudo apt-get install vipre сообщил об этом (я показываю только первые несколько строк вывода): Следующие пакеты имеют неудовлетворенные зависимости: vipre: Зависит: libmilter1.0.1, но он не будет установлен Зависит: libruby1.8 (›= 1.8.7.174), но она не будет установлена ​​Зависит: libstdc++5 (›= 1:3.3.4-1), но она не может быть установлена. ****Ошибка libstdc++5 это сюрприз, потому что я удалил его из зависимостей debian/control. - person Chip Castle; 13.07.2010
comment
Я не думаю, что смогу помочь здесь. Я помню, что похожая проблема была с файлом .upload в каталоге файла .deb. (например, mypackage_1.2.3-1_source.myserver.upload). dput не будет загружать версии меньше или равные последней загрузке на этот сервер. Посмотрите, происходит ли что-то подобное. - person Umang; 14.07.2010
comment
Что касается вашей второй проблемы, это может быть связано с тем, что на вашем сервере есть старый .deb, который не был заменен новым. Проверьте вывод таких команд, как apt-cache depends vipre и apt-cache show vipre. - person Umang; 14.07.2010
comment
Небольшое примечание о /opt: например, Ubuntu Software Center требует/требуется, чтобы приложения устанавливались в /opt. - person juzzlin; 29.12.2013
comment
Я продолжаю возвращаться к этому ответу, потому что мне кажется, что он должен быть отличным. Но без конкретного примера я не могу применить это на практике. Поскольку я продолжаю узнавать больше об упаковке deb, я возвращаюсь сюда и пытаюсь заново понять ее. Но мне еще предстоит это сделать. Я хотел бы увидеть пример проекта на github. Эти вещи очень трудно понять в форме абзаца. - person Bruno Bronosky; 26.10.2017

Вы можете установить cdbs и изменить файл правил следующим образом.

#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk

binary-install/package_name::
                   mkdir debian/$(cdbs_curpkg)/destination_path 
                   cp path_of_your_files  debian/$(cdbs_curpkg)/destination_path
person ZIADI Mohamed ali    schedule 26.12.2013