Я испытываю некоторые затруднения при создании пакета для общей библиотеки.
Я работал dh_make
и отредактированный файлы. Однако, когда я иду для создания пакета, я получаю следующее:
******@******-laptop:~/Documents/temp/jsoncpp/jsoncpp-0.5.0$ debuild dpkg-buildpackage -rfakeroot -D -us -uc dpkg-buildpackage: set CFLAGS to default value: -g -O2 dpkg-buildpackage: set CPPFLAGS to default value: dpkg-buildpackage: set LDFLAGS to default value: -Wl,-Bsymbolic-functions dpkg-buildpackage: set FFLAGS to default value: -g -O2 dpkg-buildpackage: set CXXFLAGS to default value: -g -O2 dpkg-buildpackage: source package jsoncpp dpkg-buildpackage: source version 0.5.0-1 dpkg-buildpackage: source changed by ****** dpkg-buildpackage: host architecture amd64 fakeroot debian/rules clean dh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b jsoncpp-0.5.0 dpkg-source: info: using source format `1.0' dpkg-source: info: building jsoncpp using existing jsoncpp_0.5.0.orig.tar.gz dpkg-source: info: building jsoncpp in jsoncpp_0.5.0-1.diff.gz dpkg-source: info: building jsoncpp in jsoncpp_0.5.0-1.dsc debian/rules build dh build dh_testdir dh_auto_configure dh_auto_build make[1]: Entering directory `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0' test -d obj || mkdir obj g++ -I ./include -c -o obj/json_reader.o src/lib_json/json_reader.cpp g++ -I ./include -c -o obj/json_writer.o src/lib_json/json_writer.cpp g++ -I ./include -c -o obj/json_value.o src/lib_json/json_value.cpp ar -r libjsoncpp.a obj/json_reader.o obj/json_writer.o obj/json_value.o ar: creating libjsoncpp.a make[1]: Leaving directory `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0' dh_auto_test fakeroot debian/rules binary dh binary dh_testroot dh_prep dh_installdirs dh_auto_install make[1]: Entering directory `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0' sudo cp -r include/json --target-directory=/usr/include ERROR: ld.so: object 'libfakeroot-sysv.so' from LD_PRELOAD cannot be preloaded: ignored. cp libjsoncpp.a /usr/lib/libjsoncpp.a cp: cannot create regular file `/usr/lib/libjsoncpp.a': Permission denied make[1]: *** [install] Error 1 make[1]: Leaving directory `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0' dh_auto_install: make -j1 install DESTDIR=/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0/debian/tmp returned exit code 2 make: *** [binary] Error 29 dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit status 2 debuild: fatal error at line 1340: dpkg-buildpackage -rfakeroot -D -us -uc failed
Проблема, кажется, здесь:
ОШИБКА: ld.so: возразите, что 'libfakeroot-sysv.so' от LD_PRELOAD не может быть предварительно загружен: проигнорированный.
CP libjsoncpp.a/usr/lib/libjsoncpp.a
CP: не может создать регулярный файл '/usr/lib/libjsoncpp.a': Разрешение отклонено
... но у меня нет самой слабой идеи, какова проблема.
Make-файл здесь в случае необходимости.
Используемый вами Makefile не соответствует переменной DESTDIR - пакеты никогда не должны устанавливаться непосредственно в / usr во время сборки, а вместо этого помещать файлы во временное дерево. Вы упомянули, что добавили Makefile самостоятельно - обычно бывает так, что вам нужно, чтобы он использовал переменную DESTDIR в качестве префикса для всех путей установки. Изучив инструкции по сборке пакета, пакет использует scons в качестве системы сборки, которая является заменой для make. Скорее всего, dh_make не имеет шаблона для сборки пакетов с этим, поэтому вы должны искать пакеты, которые используют его для сборки, такие как yafray, и смотреть на их debian / rules
Поскольку сборки пакетов никогда не выполняются сделано как root, лучше показать эту ошибку & amp; исправлено, вместо того, чтобы пакет перезаписывал важные файлы, так как пакет собирается в системе ничего не подозревающего разработчика.
Как вы выяснили, проблема заключается в следующем:
cp libjsoncpp.a /usr/lib/libjsoncpp.a
Вы звоните debbuild
как обычный пользователь, который не имеет прав на запись в этот каталог. Если вы попробуете sudo debbuild
, это должно сработать.