2012-01-13 31 views
10

Tôi có gói phần mềm mà tôi đã tạo RPM. Tôi không thể dán toàn bộ RPM đây vì lý do IP, nhưng đây là ý chính của vấn đề:Tại sao dịch vụ ngừng sau khi RPM được cập nhật

%pre 
/sbin/pidof program 
if [ "$?" -eq "0" ] 
then 
    /sbin/service program stop 
fi 

%post 
/sbin/chkconfig program on 
/sbin/service program start 

%preun 
/sbin/service program stop 
/sbin/chkconfig program off 

%postun 
rm -rf /program_folder 

Mỗi lần tôi cố gắng nâng cấp các gói, nó dừng dịch vụ chương trình, cài đặt tất cả mọi thứ, bắt đầu dịch vụ, và sau đó dừng lại và xóa thư mục ... bất kỳ ý tưởng nào?

+0

Tôi nghĩ câu hỏi này thuộc về http://superuser.com/ – Cyclonecode

+2

Tôi nghĩ rằng điều này vẫn đủ điều kiện như một câu hỏi lập trình, bởi vì nó xử lý các tập lệnh rpm. –

Trả lời

24

này đã làm với thứ tự mà các script được chạy:

%pre of new package 
(package install) 
%post of new package 
%preun of old package 
(removal of old package) 
%postun of old package 

Vì vậy, trong trường hợp của bạn, %preun của rpm cũ đang chạy qua, mà tắt dịch vụ này.

Điều này có thể được giải quyết bằng cách xem đối số cho tập lệnh bài đăng. Dưới đây là một bảng cho giá trị:

  install upgrade uninstall 
%pre  $1 == 1 $1 == 2 (N/A) 
%post  $1 == 1 $1 == 2 (N/A) 
%preun (N/A)  $1 == 1 $1 == 0 
%postun (N/A)  $1 == 1 $1 == 0 

Vì vậy, bạn muốn %postun kịch bản của bạn thay vì được điều này:

%preun 
if [ "$1" = "0" ]; then 
    /sbin/service program stop 
    /sbin/chkconfig program off 
fi 
exit 0 

Điều đó sẽ làm cho nó dừng chương trình duy nhất trên gỡ bỏ cài đặt đầy đủ (ví dụ; rpm -e) và nên làm điều đó cho bạn.

LƯU Ý: bạn sẽ muốn làm điều tương tự với %postun kịch bản của bạn cũng

LƯU Ý: các exit 0 ở cuối; Tôi muốn đặc biệt đặt rằng chỉ có trong trường hợp, như là một mã thoát xấu từ lệnh cuối cùng sẽ thực hiện hơn và gây ra kịch bản để thoát khỏi tình trạng đó, gây ra vấn đề với việc cài đặt rpm.

GHI CHÚ: sửa lỗi này trong vòng lặp mới không khắc phục được trong vòng kết nối hiện được cài đặt. Bạn sẽ muốn rpm -e rpm cũ với tập lệnh bị hỏng và bạn sẽ ổn khi tiếp tục.

Điều này chỉ bao gồm các tập lệnh trước/sau; phiên bản chi tiết hơn với trình kích hoạt và có thể là found here.

+0

Cảm ơn bạn rất nhiều! Điều này làm cho nó rõ ràng hơn nhiều. Tôi đã xem xét một số trang web và mọi người giải thích thứ tự nhưng tôi không thể tìm thấy bất cứ điều gì về các giá trị đối số - có thể là mù. Tôi sẽ thử cái này và đăng lại càng sớm càng tốt. – Sagar

+0

Điều đó có hiệu quả, cảm ơn! Ngoài ra, cảm ơn cho liên kết! – Sagar

Các vấn đề liên quan