문제
나는 하나의 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%-*}")