Utilizzo di launchd per aggiornare MacPorts


2

Voglio usare launchd per aggiornare periodicamente il mio albero MacPorts (es port selfupdate.

Ho creato /Library/LaunchDaemons/org.macports.selfupdate.plist:

$ ls -l /Library/LaunchDaemons/org.macports.selfupdate.plist
-rw-r--r--  1 root  wheel  669  8 Nov 12:49 /Library/LaunchDaemons/org.macports.selfupdate.plist

Ha i seguenti contenuti:

<?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>org.macports.selfupdate</string>
<key>ProgramArguments</key>
<array>
    <string>/opt/local/bin/port</string>
    <string>selfupdate</string>
</array>
<key>StandardOutPath</key>
<string>/var/log/org.macports.selfupdate.log</string>
<key>StandardErrorPath</key>
<string>/var/log/org.macports.selfupdate.err</string>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>604800</integer><!-- 1 week -->
</dict>
</plist>

L'ho caricato e verificato che sia caricato:

$ launchctl list | grep macports
-   78  org.macports.selfupdate

Ma non sembra effettivamente funzionare.

$ port info wireshark
Warning: port definitions are more than two weeks old, consider updating them by running 'port selfupdate'.
wireshark @1.12.8_3 (net)
...

Cosa mi sto perdendo?

Risposte:


1

Probabilmente hai inserito il plist in ~ / Library / LaunchAgents /. Poiché / opt / local è di proprietà di root: wheel (che è almeno l'impostazione predefinita), non si dispone delle autorizzazioni appropriate per scrivere in alcune cartelle necessarie (ad esempio /opt/local/var/macports/sources/rsync.macports. org / release / tarball / tmp). I file di registro (ad esempio /var/log/org.macports.selfupdate.log/err) non possono essere creati, poiché solo root può scrivere in / var / log /.

Quindi esegui il servizio selfupdate come daemon di avvio:

  • Rimuovere l'agente di avvio dal database launchd:

    launchctl remove org.macports.selfupdate
  • Sposta il plist in / Library / LaunchDaemons /:

    sudo mv ~/Library/LaunchAgents/org.macports.selfupdate.plist /Library/LaunchDaemons/org.macports.selfupdate.plist
  • Modifica proprietario e autorizzazioni:

    sudo chown root:wheel /Library/LaunchDaemons/org.macports.selfupdate.plist
    sudo chmod 644 /Library/LaunchDaemons/org.macports.selfupdate.plist
    
  • Carica il demone:

    sudo launchctl load /Library/LaunchDaemons/org.macports.selfupdate.plist

Tale demone di avvio viene eseguito con i permessi di root e può aggiornare i dati di MacPorts e scrivere su / var / log /.


In realtà era dentro /Library/LaunchDaemons. Non è dove dovrebbe essere? Nel frattempo controllerò le mie autorizzazioni.
Stephen Rasku,

@StephenRasku Hai lanciato inizialmente il demone con sudo launchctl load /Library/LaunchDaemons/org.macports.selfupdate.plist? Che cosa rivela il registro errori selfupdate / registro normale selfupdate?
klanomath,

L'ho lanciato in quel modo. Non ho visto alcun registro quando l'ho fatto. L'ho appena ripetuto e aggiunto la diagnostica e sembra che rsyncnon si stia collegando al proxy per qualche motivo.
Stephen Rasku,

Ho appena eseguito un port installcomando dalla riga di comando e anche questo non è riuscito. Non avevo avuto questo problema prima. Lo darò un'occhiata al mattino.
Stephen Rasku,

@StephenRasku Il file /var/log/org.macports.selfupdate.log dovrebbe almeno contenere alcuni dettagli. Ho provato questo in una VM (prima in ~ / Lib / LaunchAgents /, poi come demone di lancio in /Lib/LaunchD.../. Il primo tentativo fallì ovviamente - il secondo scrisse alcune righe (cioè la versione della porta ecc.)
klanomath,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.