문제

나는 하나의 RPM (Fedora로 만든)을 Deb 패키지로 Ubuntu에 포트해야합니다.

rpm .spec 파일에서 여러 변수를 사용하고 있습니다 ($RPM_BUILD_ROOT, %{_libdir}, %{name}, %{version}) symlink를 만들려면 :

%install
...
(cd $RPM_BUILD_ROOT/%{_bindir}; ln -sf %{_libdir}/%{name}-%{version}/%{name} . )

(상대 심포 링크는 금지되어 있습니다 (이유를 묻지 마십시오) - 그 이유는 이유입니다. ln 명령은 이상하게 보인다.)

따라서 이러한 변수의 동등한 것은 무엇입니까? debian/rules makefile?

미리 감사드립니다.

도움이 되었습니까?

해결책

(제외 : 이것은 하류 포장 대신 상류 화장이해야 할 일처럼 보입니다.)

귀하가 사용하는 프레임 워크에 따라 다릅니다 rules 파일.

~ 안에 CDB, 이런 것이 작동해야합니다 ...

#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk
# probably what you want (automagic happens),
# but I don't know details of your package
#include /usr/share/cdbs/1/class/automake.mk

DEBVERS := $(shell dpkg-parsechangelog | sed -n -e 's/^Version: //p')
VERSION := $(shell echo '$(DEBVERS)' | sed -e 's/^[[:digit:]]*://' -e 's/[~-].*//')

install/$(DEB_ALL_PACKAGES)::
        dh_link -p$(cdbs_curpkg) \
                /usr/lib/$(cdbs_curpkg)-$(VERSION)/$(cdbs_curpkg) \
                /usr/bin/$(cdbs_curpkg)

더 나은 버전을 얻는 방법이 있다면 (예 : $(shell cat version.txt))), 그걸 써. 데비안 버전이 항상 소스 패키지 버전은 아닙니다. 여기서, 나는 에포크와 포장 버전을 벗겨 내지 만 이것이 항상 정확한 것은 아닙니다.

다른 CDBS 클래스가 정의 할 수 있습니다 $${libdir} 그리고 $${bindir}, 그러나 나는 공통된 것을 보지 못했습니다.

주목하십시오 dh_link 절대 경로가 주어 지더라도 가능하면 상대 링크를 만들 것입니다. 이것이 문제라면, 당신은 정말로 불쾌한 것에 의지해야 할 수도 있습니다.

        cd debian/$(cdbs_curpkg) && ln -s ...

다른 팁

최신 버전의 DPKG (1.17.0+)에서는 다음과 같이 정식 버전을 얻을 수 있습니다.

DEBVER := $(shell dpkg-parsechangelog -SVersion)

그리고 당신이 SHELL := /bin/bash. Bash String Interpolation을 사용하여 다음과 같이 사용하십시오.

DEBVERSION := $(shell debver="$(DEBVER)"; echo "$${debver%-*}")
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top