디빌드가 정리를 수행하는 것을 방지하는 방법은 무엇입니까?

디빌드가 정리를 수행하는 것을 방지하는 방법은 무엇입니까?

저는 Debian에서 Apache 모듈을 편집하려고 합니다(기술적으로는 Raspbian Jessie-Lite에서 이 작업을 수행하고 있습니다). 대략적으로 다음을 따릅니다.데비안 빌드 지침:

$ mkdir -p ~/src/debian; cd ~/src/debian
$ apt-get source apache2-bin
$ cd apache2-2.4.10
$ debuild -b -uc -us

이전 원본 Pi에서는 빌드 프로세스가 약 1시간 30분 정도 걸렸습니다. 이것은 좋다. 한 번! 하지만 빌드 프로세스가 을 수행하고 있다고 생각하므로 make clean단일 mod_*.c 파일을 약간 편집한 후 전체 파일을 다시 빌드하려고 하므로 개발 속도가 약간 느려집니다!

명령 -dc에 추가를 시도했지만 아무것도 빌드되지 않았습니다. debuild다시 빌드하도록 "장려"하기 위해 대상 mod_*.so 파일을 삭제하려고 시도했지만 여전히 아무 것도 없습니다!

2016년 8월 21일 업데이트: debuild 명령에 -nc를 추가해도 모듈이 다시 컴파일되지 않습니다. 다음은 명령의 출력입니다.

$ debuild -b -uc -us -nc
 dpkg-buildpackage -rfakeroot -D -us -uc -b -nc
dpkg-buildpackage: source package apache2
dpkg-buildpackage: source version 2.4.10-10+deb8u5
dpkg-buildpackage: source distribution jessie-security
dpkg-buildpackage: source changed by Salvatore Bonaccorso <[email protected]>
 dpkg-source --before-build apache2-2.4.10
dpkg-buildpackage: host architecture armhf
 debian/rules build
dh build --parallel --with autotools_dev
 fakeroot debian/rules binary
dh binary --parallel --with autotools_dev
 dpkg-genchanges -b >../apache2_2.4.10-10+deb8u5_armhf.changes
dpkg-genchanges: binary-only upload (no source code included)
 dpkg-source --after-build apache2-2.4.10
dpkg-buildpackage: binary-only upload (no source included)
Now running lintian...
N: 16 tags overridden (1 error, 4 warnings, 11 info)
Finished running lintian.

답변1

명령줄 -nc에 옵션을 추가합니다 . debuild하지만 이로 인해 빌드 시스템이나 패키징에 문제가 노출될 수 있으므로 대비하세요. 그러나 작은 수정의 경우 일반적으로 꽤 잘 작동합니다.

그러나 apache2소스 패키지는 다른 많은 패키지와 마찬가지로 debhelper를 사용하기 때문에 이것만으로는 충분하지 않습니다. debhelper는 또한 각 바이너리 패키지에 대해 별도의 로그 파일에 완료된 단계에 대한 자체 로그를 유지하기 때문입니다. 이것들은 로 완전히 제거할 수 있습니다 dh_clean. 하지만 debhelper가 필요한 작업만 다시 실행하도록 하려면 관련 작업만 잘라냅니다.

sed -i '/^dh_auto_build$/Q' debian/apache2-bin.debhelper.log

달리기 전 debuild -nc.

답변2

debian 디렉토리에 규칙 파일이 있습니다. 본질적으로 make 파일입니다. 청소에 관한 모든 지시문을 제거한 다음 추가하면

override_dh_clean:

그리고 아무것도 넣지 않으면 청소가 전혀 이루어지지 않습니다. 가능성은 낮지만 가능하더라도 빌드 문제가 발생할 수 있으므로 주의하세요. 또 다른 옵션은 아무것도 변경하지 않고 -j 옵션을 사용하여 병렬로 빌드하는 것입니다. Raspberry Pi의 장점을 잘 모르겠습니다.

규칙 파일은 다음과 같아야 합니다.이것.

답변3

비슷한 문제가 있었습니다. Scite 데비안 패키지에는 다음이 포함되어 있습니다 debian/rules.

...
BUILD_DATE="$(date --utc --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" "+%b %d %Y %T")"
override CPPFLAGS += -DBUILD_DATE="\"$(BUILD_DATE)\""

%:
        dh $@

override_dh_auto_build:
        dh_auto_build --sourcedirectory=scintilla/gtk -- GTK3=1 $(BUILD_LUA)
        dh_auto_build --sourcedirectory=scite/gtk -- gnomeprefix=/usr GTK3=1 $(BUILD_LUA)
....

기본적으로 override_dh_auto_buildmake가 호출되어 변경된 소스 파일을 감지하고 변경된 파일만 다시 빌드합니다. 그러나 debian/rules이를 설정하고 BUILD_DATE실행하는 경우에도 다음을 수행합니다.

fakeroot debian/rules -j$(nproc) override_dh_auto_build

...BUILD_DATE를 정의로 사용하는 일부 cpp 소스 파일에서는 실패합니다. 해결책은 명령줄 호출에서 이 변수를 명시적으로 지정하는 것입니다.

fakeroot debian/rules -j$(nproc) CPPFLAGS+=-DBUILD_DATE="" override_dh_auto_build

...그리고 컴파일이 통과됩니다(새 .deb가 생성되지 않으므로 기다릴 필요가 없다는 추가 보너스도 있습니다). 기본적으로 이는 변경된 파일로 재구축 프로세스를 다시 실행하는 데 도움이 되며 .deb를 패키징하지 않고도 .so/.exe를 제공합니다.

관련 정보