내가 뭘 하고 있는 거지:

내가 뭘 하고 있는 거지:

내가 뭘 하고 있는 거지:

Qt의 컴파일된 버전의 deb 패키지를 구축하려고 합니다.

내가 있는 곳:

$ wget http://download.qt.io/official_releases/qt/5.10/5.10.0/single/qt-everywhere-src-5.10.0.tar.xz
$ tar -xf qt-everywhere-src-5.10.0.tar.xz ~/src/qt
$ cd ~/src/qt/qt-everywhere-src-5.10.0
$ ./configure --prefix=/opt/sim-qt --opensource --confirm-license --skip qtcharts --skip qtvirtualkeyboard --skip qtdatavis3d --silent --nomake examples --nomake tests
$ make

을 실행하면 sudo make install모든 것이 잘 설치되지만 조직의 다른 사람들도 다시 컴파일할 필요 없이 동일한 바이너리를 설치할 수 있도록 .deb 패키지가 필요합니다.

문제가 있는 단계:

내가 사용해야 하는 도구는 이라는 것을 읽었습니다 checkinstall. 간단한 helloworld 예제를 사용해 보았는데 checkinstall모든 것이 괜찮은 것 같았습니다. 이것은 완벽한 상황이고 정확히 내가 기대했던 것입니다. 그러나 이 Qt 프로젝트를 설치하려고 하면 다음과 같은 오류가 발생합니다.

$ checkinstall -D --install=no --pkgname=sim-qt --pkgversion=5.10.0 --pkgrelease=0 --pkglicense=LGPL --nodoc
...
/home/stew/src/qt/qt-everywhere-src-5.10.0/qtbase/bin/qmake -install qinstall /home/stew/src/qt/qt-everywhere-src-5.10.0/qtbase/include/QtGui/QDragLeaveEvent /opt/sim-qt/include/QtGui/QDragLeaveEvent
Error copying /home/stew/src/qt/qt-everywhere-src-5.10.0/qtbase/include/QtGui/QDragLeaveEvent to /opt/sim-qt/include/QtGui/QDragLeaveEvent: Cannot create /opt/sim-qt/include/QtGui/QDragLeaveEvent for output
Makefile:69204: recipe for target 'install_class_headers' failed
make[3]: [install_class_headers] Error 3 (ignored)
...

문제 식별:

이것은 다음과 같은 것 같습니다.오래된 버그적어도 2007년부터 존재했던 checkinstall을 사용했습니다(이것은 제가 찾을 수 있는 가장 오래된 보고서였습니다).

해결 방법을 시도해 보세요.

일부 사람들은 를 사용하도록 권장했으며 --fstrans=no그렇게 하면 이제 최소한 폴더를 설치할 수 있지만 파일이 모두 배포되지 않습니다.

$ checkinstall -D --install=no --pkgname=sim-qt --pkgversion=5.10.0 --pkgrelease=0 --pkglicense=LGPL --nodoc --fstrans=no
...
/home/stew/src/qt/qt-everywhere-src-5.10.0/qtbase/bin/qmake -install qinstall /home/stew/src/qt/qt-everywhere-src-5.10.0/qttranslations/translations/qtscript_en.qm /opt/sim-qt/translations/qtscript_en.qm
Error copying /home/stew/src/qt/qt-everywhere-src-5.10.0/qttranslations/translations/qtscript_en.qm to /opt/sim-qt/translations/qtscript_en.qm: Cannot create /opt/sim-qt/translations/qtscript_en.qm for output
Makefile:2841: recipe for target 'install_translations' failed
make[2]: [install_translations] Error 3 (ignored)
...

무엇 향후 계획:

여기서는 모두가 멈춘 것 같습니다. checkinstall11년 동안 완전히 쓸모없게 만드는 심각한 버그가 있었다면 더 이상 존재하지 않을 것이라고 생각합니다 . 하지만 그렇습니다. 그래서 사람들이 찾는 해결 방법이 누락되었습니다. 그렇지 않으면 다음에 무엇을 해야 할지 혼란스럽습니다.

사람들은 deb 파일을 어떻게 패키지합니까?

나는 이것을 찾았다우분투 튜토리얼. 그러나 버전 제어 시스템에 Canonical의 bzr을 사용하고 VCS를 작업의 일부로 사용한다고 가정합니까? 나는 이 패키지를 Ubuntu에 푸시할 계획이 없으므로 지침에 왜 등이 포함되어 있는지 이해하지 못합니다 bzr commit....

나도 이걸 찾았어데바인을 위한 튜토리얼. 나는 자동으로 물건을 생성하는 이상한 버전 제어 시스템에 의존하지 않기 때문에 그것을 좋아합니다. 하지만 또한 내가 미리 데비안화된 tar.gz 소스 아카이브를 가지고 있고 패키지를 데비안에 제출할 계획이라고 가정하는 것 같습니다. 또한 ./configurefalse인 매개변수를 추가하고 싶지 않다고 가정합니다 . 섹션 debian/rules에 공통 줄 매개변수를 추가하려고 시도했지만 override_dh_auto_configure명령 프롬프트를 다시 받기 전에 모든 것이 약 10000줄에 실패하는 것처럼 보이기 때문에 작동하는지 알 수 없습니다.

여기주제에 대한 또 다른 튜토리얼하지만 이 키를 사용하려면 gpg 키가 필요합니다. deb 패키지를 apt 저장소에 재현할 때 적절한 저장소에서 처리할 것으로 예상되는 키입니다. 이 솔루션을 실행할 때 빌드 실패 문제도 발생했습니다. 수만 줄을 인쇄하기 때문에 어디서/왜 실패하는지 알 수 없습니다. 만dh_auto_clean: make -j10 clean returned exit code 2

기본적으로 나는 실제로 작동하는 것을 방해하는 심각한 버그 없이 checkinstall과 정확히 같은 것을 원했습니다. 내가 얻은 것은 손상된 체크설치와 세 가지 대체 방법입니다. 이 방법을 사용하려면 일주일 전체를 문제 해결에 투자해야 합니다(이미 며칠을 보냈습니다). checkinstall을 수정하는 방법이 있습니까? 아니면 "make" 솔루션에서 .deb 솔루션으로 이동하기 위한 2-3 명령 솔루션이 있습니까?

일반적으로 나는 deb 패키지를 만들기 위해 cpack을 사용하지만 이 소스는 autoconf를 사용하기 때문에 어떻게 진행해야 할지 막막합니다.

답변1

checkinstall실제로 작동하고 있는 것으로 나타났습니다 . 문제는 내가 설치하려는 프로젝트였습니다. checkinstall(dh_make와 같은)은 단계 DESTDIR=some/temp/location중에 설정됩니다 make install.

이 프로젝트는 를 사용 qmake하고 에서 생성된 Makefile은 지시문을 qmake이해하지 못합니다 DESTDIR. 대신 INSTALL_ROOT필수였습니다.

.NET 대신 수동으로 설정하기 위해 사용 dh_make하고 하드 코딩했습니다 .override_dh_auto_installINSTALL_ROOTDESTDIR

dh_make명령은 프로젝트를 구성, 빌드, 설치 및 패키징하는 데 필요한 규칙 파일을 생성합니다.

를 실행한 후 dh_make새로 생성된 debian/rules파일을 다음과 같이 편집합니다.

#!/usr/bin/make -f
%:
    dh $@  --with autotools-dev --parallel
override_dh_auto_configure:
    ./configure --prefix=/opt/sim-qt --opensource --confirm-license --skip=qtcharts --skip=qtvirtualkeyboard --skip=qtdatavis3d --skip=qtwebengine --silent --nomake=examples --nomake=tests QMAKE_ARGS+=INSTALL_ROOL=/opt/sim-qt QMAKE_ARGS+=DESTDIR=

override_dh_auto_install:
    dh_auto_install -Smakefile -- INSTALL_ROOT=$(CURDIR)/debian/sim-qt/

그런 다음 하나의 명령으로 구성, 빌드 및 패키징합니다.

fakeroot dpkg-buildpackage -nc -j10 -us -uc

관련 정보