얼음이 녹는 것을 보는 것은 간단해야 하는데 그렇지 않습니다. 저는 Fedora 33을 사용하고 있으며 Diamond 텍스트 편집기용 RPM을 생성하고 있습니다. 나는 데비안에 관한 모든 것을 알아냈고 훌륭하게 작동합니다. Diamond는 현재 RPM이나 Debian 패키지가 없는 CopperSpice 라이브러리를 사용합니다. 개발 버전에서는 필수 라이브러리를 실행 파일과 동일한 디렉터리에 넣기 때문에 이는 문제가 되지 않습니다. 이러한 패키지를 만들 때 해결 방법으로 /opt/diamond 아래에 트리를 만드는 구식 방식을 사용했습니다. 매우 쉽고 훌륭하게 작동합니다. /opt/diamond에 설치하도록 빌드 프로세스에 지시할 수도 있으며, 계속 진행하면 됩니다.
저는 이 문제를 추적하는 데 이틀을 보냈습니다. 분노하게도 라이브러리 중 3개만 제한됩니다. libCsXcbSupport1.7.so를 어디에 넣어도 발견되는 것 같습니다.
[sudo] password for roland:
Last metadata expiration check: 0:29:24 ago on Mon 30 Nov 2020 06:01:12 PM CST.
Error:
Problem: conflicting requests
- nothing provides libCsCore1.7.so()(64bit) needed by diamond-2.0-1.x86_64
- nothing provides libCsGui1.7.so()(64bit) needed by diamond-2.0-1.x86_64
- nothing provides libCsNetwork1.7.so()(64bit) needed by diamond-2.0-1.x86_64
(try to add '--skip-broken' to skip uninstallable packages)
[roland@localhost share]$ sudo yum install diamond-2.0-1.x86_64.rpm --skip-broken
Last metadata expiration check: 0:29:57 ago on Mon 30 Nov 2020 06:01:12 PM CST.
Dependencies resolved.
Problem: conflicting requests
- nothing provides libCsCore1.7.so()(64bit) needed by diamond-2.0-1.x86_64
- nothing provides libCsGui1.7.so()(64bit) needed by diamond-2.0-1.x86_64
- nothing provides libCsNetwork1.7.so()(64bit) needed by diamond-2.0-1.x86_64
================================================================================
Package Architecture Version Repository Size
================================================================================
Skipping packages with broken dependencies:
diamond x86_64 2.0-1 @commandline 23 M
Transaction Summary
================================================================================
Skip 1 Package
Nothing to do.
Complete!
[roland@localhost share]$ rpm -qp diamond-2.0-1.x86_64.rpm --provides
diamond = 2.0-1
diamond(x86-64) = 2.0-1
libCsCore1.7.so
libCsGui1.7.so
libCsNetwork1.7.so
libCsXcbSupport1.7.so
[roland@localhost share]$
전체 경로를 입력해 보았습니다. 이름 사이에 공백을 추가해 보았습니다. 각 태그에 자체 줄이 있도록 여러 개의 Provide: 태그를 추가해 보았습니다. SPEC 파일에서 필요한 라이브러리를 /usr/lib/cs_lib/lib64로 이동하기도 했습니다. 어쨌든 동일한 3개의 라이브러리를 찾을 수 없습니다.
내가 간과하고 있는 꽤 분명한 뭔가가 있을 것입니다.
Name: @PACKAGE@
Version: @RPM_VERSION@
Release: @RPM_RELEASE@
Summary: Diamond text editor
License: GPL V2
Group: Applications/Editors
URL: https://www.copperspice.com/documentation-diamond.html
Vendor: @CPACK_PACKAGE_VENDOR@
Packager: Roland Hughes <[email protected]>
Provides: libCsXcbSupport1.7.so, libCsCore1.7.so, libCsGui1.7.so, libCsNetwork1.7.so
%description
@DIAMOND_DESCRIPTION@
%prep
# Cleanup any left over build files
#
rm -rf *
# Populate the build directory
#
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="%{buildroot}/opt/diamond" -DCMAKE_PREFIX_PATH=/usr/lib/cs_lib/lib64/cmake/CopperSpice "@CMAKE_SOURCE_DIR@"
%build
ninja
%install
rm -rf %{buildroot}/opt/diamond
mkdir -p %{buildroot}/opt/diamond
mkdir -p %{buildroot}/usr/lib/cs_lib/lib64
ninja install
#cp %{buildroot}/opt/diamond/libCsCore1.7.so %{buildroot}/usr/lib/cs_lib/lib64
#cp %{buildroot}/opt/diamond/libCsGui1.7.so %{buildroot}/usr/lib/cs_lib/lib64
#cp %{buildroot}/opt/diamond/libCsNetwork1.7.so %{buildroot}/usr/lib/cs_lib/lib64
#cp %{buildroot}/opt/diamond/libCsXcbSupport1.7.so %{buildroot}/usr/lib/cs_lib/lib64
#rm %{buildroot}/opt/diamond/libCsCore1.7.so
#rm %{buildroot}/opt/diamond/libCsGui1.7.so
#rm %{buildroot}/opt/diamond/libCsNetwork1.7.so
#rm %{buildroot}/opt/diamond/libCsXcbSupport1.7.so
%files
#/usr/lib/cs_lib/lib64/libCsCore1.7.so
#/usr/lib/cs_lib/lib64/libCsGui1.7.so
#/usr/lib/cs_lib/lib64/libCsNetwork1.7.so
#/usr/lib/cs_lib/lib64/libCsXcbSupport1.7.so
/opt/diamond/diamond
/opt/diamond/diamond.desktop
/opt/diamond/diamond.png
/opt/diamond/libCsCore1.7.so
/opt/diamond/libCsGui1.7.so
/opt/diamond/libCsNetwork1.7.so
/opt/diamond/libCsXcbSupport1.7.so
/opt/diamond/dictionary/de_DE.dic
/opt/diamond/dictionary/de_DE.aff
/opt/diamond/dictionary/de_DE_frami.aff
/opt/diamond/dictionary/de_DE_frami.dic
/opt/diamond/dictionary/en_US.aff
/opt/diamond/dictionary/en_US.dic
/opt/diamond/dictionary/es.aff
/opt/diamond/dictionary/es.dic
/opt/diamond/dictionary/fr.aff
/opt/diamond/dictionary/fr.dic
/opt/diamond/dictionary/it_IT.aff
/opt/diamond/dictionary/it_IT.dic
/opt/diamond/dictionary/pt.aff
/opt/diamond/dictionary/pt_BR.aff
/opt/diamond/dictionary/pt_BR.dic
/opt/diamond/dictionary/pt.dic
/opt/diamond/dictionary/userDict.txt
/opt/diamond/platforms/CsGuiXcb1.7.so
/opt/diamond/syntax/syn_clipper.json
/opt/diamond/syntax/syn_cmake.json
/opt/diamond/syntax/syn_cpp.json
/opt/diamond/syntax/syn_css.json
/opt/diamond/syntax/syn_doxy.json
/opt/diamond/syntax/syn_errlog.json
/opt/diamond/syntax/syn_html.json
/opt/diamond/syntax/syn_java.json
/opt/diamond/syntax/syn_js.json
/opt/diamond/syntax/syn_json.json
/opt/diamond/syntax/syn_make.json
/opt/diamond/syntax/syn_none.json
/opt/diamond/syntax/syn_nsi.json
/opt/diamond/syntax/syn_php.json
/opt/diamond/syntax/syn_pl.json
/opt/diamond/syntax/syn_py.json
/opt/diamond/syntax/syn_sh.json
/opt/diamond/syntax/syn_txt.json
/opt/diamond/syntax/syn_xml.json
/opt/diamond/printerdrivers/CsPrinterDriverCups1.7.so
%post
echo "called post install script section"
if [ $1 == 1] ; then
echo "we are in install"
ln -s /opt/diamond/diamond /usr/local/bin
cp /opt/diamond/diamond.desktop /usr/share/applications
fi
%postun
if [ $1 == 1 ] ; then
# upgrading
rm /usr/local/bin/diamond
else if [ $1 == 0 ] ; then
# removing
rm /usr/local/bin/diamond
rm /usr/share/applications/diamond.desktop
fi
fi
%changelog
# let's skip this for now
어떤 통찰력이라도 감사드립니다.
답변1
답변이 너무 많아서 직접 답변을 게시해야겠다고 생각했습니다. 이것이 실제로 작동하는 것입니다.
=======
Name: @PACKAGE@
Version: @RPM_VERSION@
Release: @RPM_RELEASE@
Summary: Diamond text editor
License: GPL V2
Group: Applications/Editors
URL: https://www.copperspice.com/documentation-diamond.html
Vendor: @CPACK_PACKAGE_VENDOR@
Packager: Roland Hughes <[email protected]>
Provides: libCsCore1.7.so()(64bit), libCsGui1.7.so()(64bit), libCsNetwork1.7.so()(64bit)
%description
@DIAMOND_DESCRIPTION@
%prep
# Cleanup any left over build files
#
rm -rf *
# Populate the build directory
#
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="%{buildroot}/opt/diamond" -DCMAKE_PREFIX_PATH=/usr/lib/cs_lib/lib64/cmake/CopperSpice "@CMAKE_SOURCE_DIR@"
%build
ninja
%install
rm -rf %{buildroot}/opt/diamond
mkdir -p %{buildroot}/opt/diamond
mkdir -p %{buildroot}/usr/lib64/cs_lib/lib64
ninja install
%files
/opt/diamond/diamond
/opt/diamond/diamond.desktop
/opt/diamond/diamond.png
/opt/diamond/libCsCore1.7.so
/opt/diamond/libCsGui1.7.so
/opt/diamond/libCsNetwork1.7.so
/opt/diamond/libCsXcbSupport1.7.so
/opt/diamond/dictionary/de_DE.dic
/opt/diamond/dictionary/de_DE.aff
/opt/diamond/dictionary/de_DE_frami.aff
/opt/diamond/dictionary/de_DE_frami.dic
/opt/diamond/dictionary/en_US.aff
/opt/diamond/dictionary/en_US.dic
/opt/diamond/dictionary/es.aff
/opt/diamond/dictionary/es.dic
/opt/diamond/dictionary/fr.aff
/opt/diamond/dictionary/fr.dic
/opt/diamond/dictionary/it_IT.aff
/opt/diamond/dictionary/it_IT.dic
/opt/diamond/dictionary/pt.aff
/opt/diamond/dictionary/pt_BR.aff
/opt/diamond/dictionary/pt_BR.dic
/opt/diamond/dictionary/pt.dic
/opt/diamond/dictionary/userDict.txt
/opt/diamond/platforms/CsGuiXcb1.7.so
/opt/diamond/syntax/syn_clipper.json
/opt/diamond/syntax/syn_cmake.json
/opt/diamond/syntax/syn_cpp.json
/opt/diamond/syntax/syn_css.json
/opt/diamond/syntax/syn_doxy.json
/opt/diamond/syntax/syn_errlog.json
/opt/diamond/syntax/syn_html.json
/opt/diamond/syntax/syn_java.json
/opt/diamond/syntax/syn_js.json
/opt/diamond/syntax/syn_json.json
/opt/diamond/syntax/syn_make.json
/opt/diamond/syntax/syn_none.json
/opt/diamond/syntax/syn_nsi.json
/opt/diamond/syntax/syn_php.json
/opt/diamond/syntax/syn_pl.json
/opt/diamond/syntax/syn_py.json
/opt/diamond/syntax/syn_sh.json
/opt/diamond/syntax/syn_txt.json
/opt/diamond/syntax/syn_xml.json
/opt/diamond/printerdrivers/CsPrinterDriverCups1.7.so
%post
# no matter install or upgrade, create and copy
#
ln -s /opt/diamond/diamond /usr/local/bin
cp /opt/diamond/diamond.desktop /usr/share/applications
%postun
# No difference between upgrade and uninstall for these
#
rm /usr/local/bin/diamond
rm /usr/share/applications/diamond.desktop
if [ $1 -gt 0 ] ; then
# removing - need to completely remove the directory
rm -rf /opt/diamond
fi
%changelog
# let's skip this for now
=======
믿거나 말거나, 제공 라인이 나열되어야 합니다.정확히이와 같이:
Provides: libCsCore1.7.so()(64bit), libCsGui1.7.so()(64bit), libCsNetwork1.7.so()(64bit)