Ninja: Menjalankan target instal dengan hak akses root akan menghentikan permintaan berikutnya

Dibuat pada 17 Jul 2017  ·  9Komentar  ·  Sumber: ninja-build/ninja

"Pola umum" untuk perpustakaan adalah menjalankan make dan kemudian sudo make install . Ini bekerja dengan baik dengan CMake. Namun, saat menggunakan Ninja sebagai sistem build yang mendasarinya, sudo ninja install mengubah pemilik .ninja_log menjadi root. Pemanggilan berikutnya dari ninja daripada gagal dengan

 ninja: error: opening build log: Permission denied

Hanya menghapus file setelahnya tampaknya baik-baik saja, tetapi ini bukan cara yang harus dilakukan, bukan? Ketika saya mengangkat masalah ini

Komentar yang paling membantu

Halo,

Bagaimana dengan memeriksa apakah sudah ada file log, jika ada, pastikan izinnya tetap sama, jika tidak, ganti namanya saja (dan ambil uid dan gid dari pengguna yang sedang berjalan)?

Saya membuat PR https://github.com/ninja-build/ninja/pull/1362 untuk melihat tampilannya dalam kode.

Semua 9 komentar

Jika Anda memiliki target ninja yang membangun sesuatu, "sudo ninja ..." akan membangun output perantara tersebut sebagai root, yang juga tidak diinginkan (file akan memiliki pemilik yang salah dan menjalankan kompiler sebagai root).

Saya pikir lebih baik jika perintah instal sendiri menggunakan Sudo. Artinya, file build akan dikonfigurasi sedemikian rupa sehingga ninja install akan menjalankan perintah yang terlihat seperti sudo cp ... .

Memasukkannya ke dalam aturan pemasangan itu buruk: tidak semua pemasangan harus dilakukan sebagai root dan tidak semua mesin menggunakan Sudo.

Benar, maksud saya terserah generatornya.

Jadi pengembang CMake berpikir ini harus diselesaikan oleh ninja, dan menurut Anda itu harus diselesaikan oleh CMake. Dapat dimengerti, dan saya tidak cukup berpengetahuan untuk memberikan pendapat, tetapi tidak mungkin untuk menyelesaikan masalah.

Bisakah Anda menautkan ke utas cmake yang relevan?

Itu ditautkan ke dalam deskripsi: https://gitlab.kitware.com/cmake/cmake/issues/17073 .

Halo,

Bagaimana dengan memeriksa apakah sudah ada file log, jika ada, pastikan izinnya tetap sama, jika tidak, ganti namanya saja (dan ambil uid dan gid dari pengguna yang sedang berjalan)?

Saya membuat PR https://github.com/ninja-build/ninja/pull/1362 untuk melihat tampilannya dalam kode.

Saya menghadapi masalah yang sama saat membangun sumber.
Masalahnya adalah beberapa folder dibuat dengan izin root dan beberapa folder lain dengan izin nama pengguna lainnya.
Untuk menghilangkan ini, ubah izin lengkap kode sumber menjadi satu pengguna.
sudo chown -R nama pengguna: nama pengguna

Masalah yang sama disini. Selalu harus melakukan sudo chown $USER:$USER .ninja_* setelah sudo ninja install . Terima kasih semua telah menyelidiki masalah ini. Kamu hebat!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat