.spec
rpm 설치 파일이 있습니다 . 설치 후 다음 코드 조각이 있습니다(%post 스크립트릿).
%post -n %{package_name}
# Enable the service at boot time
%if %{?suse_version:1}0
/usr/lib/lsb/install_initd %{_initrddir}/%{package_name}
%else
chkconfig --add %{package_name}
%endi
설치 후 단계 에서 zypper install package_name
다음 오류로 인해 실패합니다.
/var/tmp/rpm-tmp.Z5R29N: line 2: /usr/lib/1sb/install _initd: No such file or directory
warning: %post (package_name.sles15.x86_64) scriptlet failed, exit status 127
rpm용 .spec 파일을 처음 사용하지만 /usr/lib/lsb/
SLES 15 SP4에 디렉터리가 없기 때문에 이 스크립렛이 실패합니다.
내 질문은 다음과 같습니다
- 이 스크립트는 정확히 무엇을 하고 있나요?
/lsb/
SLES 15 SP4에서 이 경로를 생성할 수 있도록 이 패키지를 어디서 구할 수 있습니까 ? SLES 15 SP4에 lsb-xxx 패키지가 사전 설치되어 있는지 확인했지만 여기서는 작동하지 않습니까?- 이 스크립틀릿 내에서 sles 15 SP4에 대한 사례 확인을 수행해야 합니까? 좋다:
%if 0%{?sle_version} == 150400 && 0%{?is_opensuse}
// do somthing
%endif
답변1
이 사양은 매우 구식입니다.
이 스크립트는 정확히 무엇을 하고 있나요?
이 코드 조각이 하는 일은 init.d
다음 위치에 스크립트를 설치하는 것입니다.sysv-init
, 시작 시 서비스를 시작합니다.
SLE 12 이후 SUSE(및 전환된 대부분의 다른 배포판)는systemd
, init.d
완전히 구식이며 서비스로 전환이 보장됩니다.
SLES 15 SP4에서 이 경로를 생성할 수 있도록 이 /lsb/ 패키지를 어디서 구할 수 있습니까? SLES 15 SP4에 lsb-xxx 패키지가 사전 설치되어 있는지 확인했지만 여기서는 작동하지 않습니까?
할 수 없습니다. 현재 서비스를 시작하고 관리하는 이러한 방법에 대한 지원은 매우 제한적입니다. 그 중 하나는 다음과 같습니다.systemd-sysv-generator
systemd
, 이것은 솔루션이지만 이것이 중요한 소프트웨어라면 기본 솔루션을 사용하겠습니다.
chkconfig
하지만 해당 코드 조각은 SLES 15에서 실행되지 않으며 실행될 수 없기 때문에 완전히 다시 작성해야 합니다.
이 스크립틀릿 내에서 sles 15 SP4에 대한 사례 확인을 수행해야 합니까? 좋다:
여전히 지원을 받고 SLE < 12
있으며 기존 방식을 유지해야 한다면 그렇게 할 수 있습니다.
네이티브로 만들고 싶다면 다음을 수행해야 합니다.
- 설치하려는 스크립트를 찾으세요.
- 이 스크립트를 참조로 사용하여시스템 서비스 단위 파일
- 소스가 있고 수정할 수 있으면 소스에 추가하세요. 수정할 소스 코드가 없으면 빌드 시 패치해야 합니다.
- 해당 조각을 제거하고 따르십시오.가이드(openSUSE에서, SLE에서는 잘 작동함) 이것을 코드에 구축하세요
%if 0%{?sle_version} == 150400 && 0%{?is_opensuse}
참고로 이는 openSUSE Leap 15.4에만 일치하고 SLE 15.4에는 일치하지 않는 조건입니다. Leap과 SLE는 동일하므로 문제가 되지 않지만 의외일 수도 있습니다.