Jak stworzyć pkg, który instaluje pliki do / usr / local

3

Próbowałem użyć pakietów Whitebox do stworzenia instalatora dla LaunchDaemon. Demon wywołuje skrypt powłoki, który sam pobiera plik konfiguracyjny.

Chciałbym więc instalatora, który instaluje:

  • /Library/LaunchDaemons/my_daemon.plist. (To nie jest problem).
  • /usr/local/bin/myscript.sh
  • /usr/local/etc/myscript.conf

Nie mogę znaleźć sposobu określenia ścieżki docelowej / usr / local.

Pakiety nie pozwalają mi edytować miejsca docelowego tych 2 plików i wydaje się, że chcę je zainstalować w plikach „./myscript.sh” i „./myscript.conf”, chociaż pozwoliły mi zdefiniować bezwzględne miejsce docelowe dla plików. plist plik w / Library / LaunchDaemons.

Chyba mógłbym napisać skrypt poinstalacyjny, który w razie potrzeby tworzy katalogi i kopiuje tam pliki. Ale czy nie istnieje lepsze / prostsze rozwiązanie, które przeoczam?

Innymi słowy, w jaki sposób mogę utworzyć instalator .pkg, który pozwala mi określić bezwzględne katalogi dla niektórych plików i który tworzy te katalogi podczas instalacji, jeśli to konieczne.

Czy skrypt powłoki poinstalacyjnej jest jedynym rozwiązaniem, czy istnieje sposób, aby Pakiety wykonywały zadania automatycznie, czy jest też inna aplikacja do tworzenia pakietów, która byłaby bardziej praktyczna?

mivk
źródło
„Nie mogę znaleźć sposobu określenia ścieżki docelowej / usr / local.” W ramach demona? Ponadto potwierdź, że istnieje katalog / usr / local /. Chociaż domyślnie jest uwzględniony w zmiennej $ PATH, nie istnieje domyślnie.
njboot
Miałem nadzieję, że instalator utworzy katalogi w razie potrzeby, ale nawet nie pozwala mi ich określić.
mivk
@mivk, czy masz jakieś rozwiązania tego problemu?
kroky

Odpowiedzi:

2

Zamiast używać skryptu do tworzenia / usr / local i jego podfolderów, dołącz je jako część ładunku pakietu. To znaczy, stwórz prototypowy folder „lokalny” z podfolderami „bin” i „etc”, a także w nim swój skrypt i plik conf. Ustaw uprawnienia poprawnie (root: admin, 755 dla wszystkich oprócz pliku conf, 644 lub może 664 dla tego). Następnie utwórz pakiet instalatora, który umieści całą strukturę folderów w / usr.

Zauważ, że jeśli / usr / local (i niektóre podfoldery i pliki) już istnieją, instalator po prostu połączy ładunek pakietu z tym, co już istnieje (tzn. Robi dokładnie to, co chcesz).

Gordon Davisson
źródło
Masz na myśli „umieszcza całą strukturę folderów w / usr / local”? Nie ma w „/ bin”, prawda?
thoni56
1

/usr/localdomyślnie nie istnieje. Musisz go utworzyć za pomocą terminalu , aby użyć go jako ścieżki docelowej. Otwórz Terminal i wprowadź następujące polecenie (kliknij trzy razy, skopiuj i wklej w monicie). Po wyświetleniu monitu wprowadź hasło:

sudo mkdir /usr/local/{,bin,etc}; chmod -R 775 /usr/local/; chown -R root:admin /usr/local; exit

Pierwsza część tworzy katalog i podfoldery, druga modyfikuje jego uprawnienia, a trzecia modyfikuje własność.

njboot
źródło
Dzięki, ale wiem to wszystko i mogę napisać skrypt powłoki, który robi wszystko, co potrzebne. Zredagowałem pytanie, aby było bardziej jasne.
mivk
1
trzykrotnie kliknij, skopiuj <- nie wiedziałem o tym. +1
Rob
1
Powyższe można nieco skrócić, używając sudo mkdir -m 775 -p /usr/local/{,bin,etc} i akceptując, że root: wheel jest mniej więcej taki sam jak root: admin.
Asmus
@Asmus Lubię skracanie, dużo bardziej uporządkowane, ale nie rozumiem, w jaki sposób root: wheel jest równoważny root: admin w praktyce.
njboot
1
@ njboot Cóż, jeśli jesteś użytkownikiem administracyjnym (co w „normalnej” konfiguracji jest równoważne z możliwością sudo), możesz i tak robić, co chcesz z tymi folderami; dla użytkowników niebędących administratorami („personel”) zarówno: wheel, jak i: admin są restrykcyjne w ten sam sposób. Główna różnica polega na tym, czy administrator musi wpisać swoje hasło, czy nie. Jeśli plik nie ma być dotknięty „przypadkiem” za pomocą root: wheel jest bezpieczniejszym sposobem, dlatego też większość aplikacji Apple jest konfigurowana jako root: wheel. Jeśli ma to być dotykane tylko przez administratorów, możesz sam być właścicielem.
Asmus