Questo potrebbe avere più a che fare con il rilevamento di sistemi operativi, ma ho bisogno in particolare del sistema init attualmente in uso sul sistema.
Fedora 15 e Ubuntu ora usano systemd, Ubuntu usava Upstart (impostazione predefinita da molto tempo fino al 15.04), mentre altri usano varianti di System V.
Ho un'applicazione che sto scrivendo per essere un demone multipiattaforma. Gli script init vengono generati dinamicamente in base a parametri che possono essere passati su configure.
Quello che mi piacerebbe fare è solo generare lo script per il particolare sistema init che stanno usando. In questo modo lo script di installazione può essere eseguito ragionevolmente senza parametri come root e il demone può essere "installato" automagicamente.
Questo è quello che ho escogitato:
- Cerca systemd, upstart, ecc. In / bin
- Confronta / proc / 1 / comm con systemd, upstart, ecc
- Chiedi all'utente
Quale sarebbe il miglior modo cross / platform per farlo?
Tipo di relazione, posso dipendere da bash per essere sulla maggior parte di * nix o dipende dalla distribuzione / dal sistema operativo?
Piattaforme target:
- Mac OS
- Linux (tutte le distribuzioni)
- BSD (tutte le versioni)
- Solaris, Minix e altri * nix
ps -p 1 -o command(stampa il percorso alla corrente init). Su Arch Linux e Fedora (IIRC), è un collegamento simbolico al systemdbinario (probabilmente lo stesso su tutti i systemdsistemi). Su upstart, init --helpstamperà le informazioni sull'utilizzo e sulla mia scatola upstartviene menzionato dove si dice chi deve inviare un'e-mail. Su FreeBSD (sysV), questo restituirà un errore. Potrebbero esserci indizi simili su altri sistemi, ma da quando ho posto questa domanda, ho deciso di crearli per tutte le piattaforme e creare pacchetti separati per ognuno.
sudo lsof -a -p 1 -d txtpuò dare risultati ancora più esatti. pspuò stampare un nome arbitrario, mentre con lsofte otterrai il vero percorso eseguibile. (Vedi la mia domanda unix.stackexchange.com/questions/102453/… )