Membuat symlink di / usr / bin saat membuat RPM


13

Saya membuat RPM untuk aplikasi yang belum memilikinya. Saya sudah membuatnya dan menginstalnya dengan baik di /optdirektori menggunakan $RPM_BUILD_ROOT, tapi saya juga ingin membuat beberapa symlink /usr/binsehingga aplikasi tersedia di jalan. Semua upaya saya untuk melakukan ini telah menghasilkan kesalahan "izin ditolak" karena saya berjalan rpmbuildsebagai pengguna non-root dan itu tidak diizinkan untuk membuat file di /usr/bin/.

Ini file .spec saya saat ini:

Summary: Berkeley UPC
Name: berkeley_upc
Version: 2.8.0
Release: 1
Source0: %{name}-%{version}.tar.gz
License: GPL
Group: Development/Tools
BuildRoot: %{_builddir}/%{name}-root
Prefix: /opt/bupc2.8
Prefix: /usr

%description
Berkeley UPC on the BASS for the comp633 class.

%prep
%setup -q

%build
./configure CC=gcc44 CXX=g++44 --disable-aligned-segments --prefix=/opt/bupc2.8
make %{_smp_mflags}

%install
rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install

mkdir -p ${RPM_BUILD_ROOT}%{_bindir}
mkdir -p ${RPM_BUILD_ROOT}%{_mandir}/man1

ln -sf /opt/bupc2.8/bin/upcc          ${RPM_BUILD_ROOT}%{_bindir}
ln -sf /opt/bupc2.8/bin/upcc_multi    ${RPM_BUILD_ROOT}%{_bindir}
ln -sf /opt/bupc2.8/bin/upcc_multi.pl ${RPM_BUILD_ROOT}%{_bindir}
ln -sf /opt/bupc2.8/bin/upcdecl       ${RPM_BUILD_ROOT}%{_bindir}
ln -sf /opt/bupc2.8/bin/upcrun        ${RPM_BUILD_ROOT}%{_bindir}
ln -sf /opt/bupc2.8/bin/upc_trace     ${RPM_BUILD_ROOT}%{_bindir}

ln -sf /opt/bupc2.8/man/man1/upcc.1      ${RPM_BUILD_ROOT}%{_mandir}/man1
ln -sf /opt/bupc2.8/man/man1/upcdecl.1   ${RPM_BUILD_ROOT}%{_mandir}/man1
ln -sf /opt/bupc2.8/man/man1/upcrun.1    ${RPM_BUILD_ROOT}%{_mandir}/man1
ln -sf /opt/bupc2.8/man/man1/upc_trace.1 ${RPM_BUILD_ROOT}%{_mandir}/man1

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
/opt/bupc2.8
%config /opt/bupc2.8/etc
%config /opt/bupc2.8/opt/etc

%{_bindir}/upcc
%{_bindir}/upcc_multi
%{_bindir}/upcc_multi.pl
%{_bindir}/upcdecl
%{_bindir}/upcrun
%{_bindir}/upc_trace

%{_mandir}/man1/upcc.1.gz
%{_mandir}/man1/upcdecl.1.gz
%{_mandir}/man1/upcrun.1.gz
%{_mandir}/man1/upc_trace.1.gz

Jawaban:


6

ln -sf /opt/bupc2.8/bin/upcc ${RPM_BUILD_ROOT}/%{_bindir}

Tautan harus dibuat di %buildbagian ini dan juga perlu menunjuk ke tempat Anda menginstal RPM.

Sebelum membuat tautan pastikan bahwa direktori tujuan ada, yaitu ${RPM_BUILD_ROOT}/%{_bindir}. Anda dapat menggunakan mkdiratau install -duntuk ini.


Saya mengedit file .spec saya sesuai dengan apa yang saya pikir Anda sarankan dan saya mendapatkan kesalahan berikut: + ln -sf /opt/bupc2.8/bin/upcc / home / eddale / src / rpm / tmp / berkeley_upc-root / usr / bin ln: membuat tautan simbolis /home/eddale/src/rpm/tmp/berkeley_upc-root/usr/bin' to /opt/bupc2.8/bin/upcc ': Tidak ada file atau direktori seperti itu
Edward Dale

Saya pikir Anda perlu membuat direktori tujuan, yaitu /home/.../usr/bin. Begini cara saya melakukannya: github.com/ciupicri/rpmbuild/blob/master/SPECS/… (baris 36).
Cristian Ciupitu

Itu masalahnya. Saya telah memperbarui pertanyaan untuk memuat versi final yang berfungsi. Terima kasih!
Edward Dale

1

macro %{__ln_s} Bagus juga

contoh tambahkan pasang tautan tautan simbolis:

%post
%{__ln_s} -f %{_bindir}/exec %{_bindir}/exec2

contoh hapus tautan tautan simbolis:

%postun
rm -f %{_bindir}/exec2

1
Selama peningkatan rpm -U, rpm lama akan mengeksekusi postun% dan menghancurkan file itu. RPM baru tidak akan memiliki tautan, kode Anda buruk.
ljdelight
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.