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 systemd
binario (probabilmente lo stesso su tutti i systemd
sistemi). Su upstart
, init --help
stamperà le informazioni sull'utilizzo e sulla mia scatola upstart
viene 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 txt
può dare risultati ancora più esatti. ps
può stampare un nome arbitrario, mentre con lsof
te otterrai il vero percorso eseguibile. (Vedi la mia domanda unix.stackexchange.com/questions/102453/… )