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.
Nguồn
2012-01-13 19:18:59
Tôi nghĩ câu hỏi này thuộc về http://superuser.com/ – Cyclonecode
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. –