Questo potrebbe avere più a che fare con il rilevamento dei 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 (predefinito 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 di inizializzazione vengono generati dinamicamente in base a parametri che possono essere passati in configure.
Quello che vorrei fare è generare solo lo script per il particolare sistema di inizializzazione che stanno usando. In questo modo lo script di installazione può essere eseguito ragionevolmente senza parametri come root e il demone può essere "installato" automaticamente.
Questo è quello che mi è venuto in mente:
- Cerca systemd, upstart, ecc in /bin
- Confronta /proc/1/comm con systemd, upstart, ecc.
- Chiedi all'utente
Quale sarebbe il miglior modo multipiattaforma per farlo?
In qualche modo correlato, 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
Risposta accettata:
Per la seconda domanda, la risposta è no e dovresti dare un'occhiata a Risorse per la programmazione di shell portatili.
Per quanto riguarda la prima parte, prima di tutto bisogna sicuramente stare attenti. Direi di eseguire diversi test per essere sicuro – perché il fatto che qualcuno ha systemd (ad es.) installato, non significa che sia effettivamente utilizzato come init
predefinito . Inoltre, guardando /proc/1/comm
può essere fuorviante, perché alcune installazioni di vari programmi init possono creare automaticamente /sbin/init
un collegamento simbolico o anche una versione rinominata del loro programma principale.
Forse la cosa più utile potrebbe essere guardare il tipo di script di init, perché quelli sono ciò che creerai effettivamente, indipendentemente da cosa li esegue.
Come nota a margine, potresti anche dare un'occhiata a OpenRC che mira a fornire una struttura di script di inizializzazione compatibile sia con i sistemi Linux che BSD.