Khởi động câu hỏi tải đại lý


0

Tôi có tác nhân khởi chạy sau chạy trên OS X và chạy đoạn script bên dưới để xóa ứng dụng khi người dùng tải xuống bản nâng cấp hệ điều hành từ cửa hàng Ứng dụng. Sau đó nó sẽ hiển thị một thông báo cho người dùng sau khi nó bị xóa.

#!/bin/bash

Version=$(sw_vers | grep ProductVersion | tail -c 7 | cut -d . -f 2)    

if [[ $Version -ge 11 ]]
then  
    launchctl unload /Library/LaunchAgents/net.company_name.blocksierra.plist
    rm -f /Library/LaunchAgents/net.company_name.blocksierra.plist
    rm -f /usr/local/bin/blocksierra.sh
exit 0

else
    rm -rf /Applications/Install\ macOS\ Sierra\ Public\ Beta.app/
    osascript -e 'display dialog "macOS sierra is not allowed on computers at this time." with title "Technology Notice" buttons {"OK"} default button "OK" giving up after 30'
fi

Bây giờ tôi sẽ đóng gói nó và sau đó triển khai nó cho tất cả các máy Mac của chúng tôi. Câu hỏi của tôi là tôi phải thêm gì vào tập lệnh để có được gói tự động "tải" launchagent tự động sau khi gói được cài đặt?

Vì vậy, nói cách khác, làm thế nào để tôi kết hợp lệnh này?

sudo launchctl load /Library/LaunchAgents/net.company_name.blocksierra.plist

Đây là số nhiều

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  "http://www.apple.com    /DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>net.company_name.blocksierra</string>
<key>ProgramArguments</key>
<array>
    <string>/usr/local/bin/blocksierra.sh</string>
</array>
<key>KeepAlive</key>
<dict>
    <key>PathState</key>
    <dict>
        <key>/Applications/Install macOS Sierra Public Beta.app/</key>
        <true/>
    </dict>
</dict>
<key>OnDemand</key>
<true/>
</dict>
</plist>

Câu trả lời:


1

Tất cả các công việc liên quan đến các mục được cài đặt bởi các gói (tức là trình cài đặt pkg) được thực hiện với các tập lệnh preflight hoặc postflight được bao gồm trong gói.

Một tập lệnh preflight có thể kiểm tra nếu một thư mục cần thiết tồn tại và nếu quyền của nó được đặt đúng. Một tập lệnh postflight có thể tải các tác nhân khởi chạy và trình nền được cài đặt bởi trình cài đặt pkg và đặt chủ sở hữu cũng như quyền của chúng.

Trong trường hợp của bạn, bạn sẽ sử dụng một kịch bản chiếu hậu như thế này:

#!/bin/bash

sudo /bin/launchctl load /Library/LaunchAgents/net.company_name.blocksierra.plist

BTW: Sử dụng if [[ $Version -ge 11 ]]sẽ dỡ và xóa tác nhân khởi chạy khi El Capitan được cài đặt. Bạn có thể phải thay đổi điều này thành 12.


Tập lệnh postflight mà bạn cung cấp hoạt động và Launchagent xóa ứng dụng, tuy nhiên, khi tải xuống lại ứng dụng, nó KHÔNG xóa nó. Tôi đã xác minh plist được tải bằng cách gõ danh sách khởi chạy. Bạn có thể tư vấn?
sql1

Trong thử nghiệm của tôi, nó là 10.10.5. Phiên bản của những người khác dao động từ 10.8 đến 10.11.
sql1

Để chặn cả Sierra và beta Sierra. Chúng tôi không cần phải chặn El cap. Mục tiêu là chặn việc nâng cấp lên sierra từ bất kỳ HĐH nào trước đó mà người dùng đang ở trên Eg nếu người dùng ở trên 10.8 / 10.9 / 10.10 hoặc 10.11.
sql1

kịch bản postflight của bạn hoạt động tốt trở lại. khi khởi động lại, ứng dụng sẽ bị xóa. Nhưng osascript, như trên, không hiển thị thông báo giật gân cho người dùng? Có phải vì sudo đang được sử dụng trong tải sudo / bin / launchctl / L Library / LabAgents / net.company_name.blocksierra.plist và đây là LA? Làm thế nào tôi có thể nhận được một tin nhắn giật gân cho người dùng nếu tôi làm điều này như một LD?
sql1

@sql Kịch bản postflight chỉ được thực thi một lần - sau khi cài đặt pkg. Không có mối quan hệ giữa tập lệnh postflight và các công việc mà một la hoặc một ld phải thực hiện. Postflight chỉ tải và bắt đầu la / ld mới vì chúng không thể tự khởi động cũng như launchd không biết chúng.
klanomath
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.