Ini mungkin lebih berkaitan dengan mendeteksi sistem operasi, tetapi saya secara khusus membutuhkan sistem init yang saat ini digunakan pada sistem.
Fedora 15 dan Ubuntu sekarang menggunakan systemd, Ubuntu dulu menggunakan Pemula (default lama hingga 15,04), sementara yang lain menggunakan variasi Sistem V.
Saya memiliki aplikasi yang saya tulis untuk menjadi daemon lintas platform. Skrip init sedang dibuat secara dinamis berdasarkan parameter yang dapat diteruskan saat konfigurasi.
Yang ingin saya lakukan hanyalah membuat skrip untuk sistem init tertentu yang mereka gunakan. Dengan cara ini skrip instalasi dapat dijalankan secara wajar tanpa parameter sebagai root dan daemon dapat “diinstal” secara otomatis.
Inilah yang saya dapatkan:
- Telusuri systemd, pemula, dll di /bin
- Bandingkan /proc/1/comm dengan systemd, pemula, dll
- Tanyakan kepada pengguna
Apa cara lintas/platform terbaik untuk melakukan ini?
Agak terkait, Dapatkah saya bergantung pada bash untuk menjadi mayoritas *nix atau bergantung pada distribusi/OS?
Platform target:
- MacOS
- Linux (semua distribusi)
- BSD (semua versi)
- Solaris, Minix, dan *nix lainnya
Jawaban yang Diterima:
Untuk pertanyaan kedua, jawabannya adalah tidak dan Anda harus melihat Sumberdaya untuk pemrograman shell portabel.
Adapun bagian pertama – pertama-tama, Anda tentu harus berhati-hati. Saya akan mengatakan melakukan beberapa tes untuk memastikan – karena fakta bahwa seseorang memiliki systemd (misalnya.) diinstal, tidak berarti itu benar-benar digunakan sebagai init
default . Juga, lihat /proc/1/comm
dapat menyesatkan, karena beberapa penginstalan berbagai program init dapat secara otomatis membuat /sbin/init
hardlink symlink atau bahkan versi yang diubah namanya dari program utama mereka.
Mungkin hal yang paling berguna adalah melihat jenis skrip init – karena itulah yang sebenarnya akan Anda buat, apa pun yang menjalankannya.
Sebagai catatan tambahan, Anda mungkin juga melihat OpenRC yang bertujuan untuk menyediakan struktur skrip init yang kompatibel dengan sistem Linux dan BSD.