Mengapa apt-get membutuhkan sudo?

12

Ini mungkin pertanyaan yang bodoh, tetapi saya baru-baru ini menyadari bahwa saya tidak tahu mengapa tidak ada fungsi pengguna tunggal dengan apt-get.

Jawaban Saya tidak mencari:

  • "Itu karena apt menulis ke direktori tingkat sistem". Ini adalah level permukaan mengapa, tapi saya mencari level yang lebih dalam. Apakah ada sesuatu yang secara fundamental memblokir lingkungan pengguna tunggal (ala pip + virtualenv)?
  • "Anda bisa membangun dari sumber". Ini adalah solusi, tetapi tidak menjawab pertanyaan saya. Saya tidak ingin memperbaiki masalah jangka pendek, dan saya memiliki akses root pada semua mesin saya.
PattimusPrime
sumber
Saya harap Anda tahu Anda dapat membangun paket apa pun dari sumber di direktori home Anda.
jobin
Benar, tapi saya mencari alasan mengapa mendasari pembatasan apt-get. Bangunan dari sumber tidak menjawab itu.
PattimusPrime
1
Saya pikir pertanyaan yang Anda tanyakan adalah "Mengapa sebagian besar perangkat lunak Linux tidak dapat dipindahkan?". Sangat mungkin untuk memungkinkan apt-get untuk menginstal perangkat lunak ke direktori pengguna-lokal, tetapi karena sebagian besar perangkat lunak tidak mendukung ini akan ada gunanya melakukannya.

Jawaban:

10

Mengapa apt-get membutuhkan sudo?

Tidak selalu. Anda dapat menggunakan apt-gettanpa sudo. Ada beberapa contoh di mana Anda tidak perlu sudosama sekali, seperti menggunakan apt-get downloadyang mengunduh paket ke direktori Anda saat ini , apt-get sourceyang mengunduh file sumber debian ke direktori Anda saat ini, changelogyang mengunduh dan mencetak changelog dari paket yang diberikan, dan perintah apa pun yang memiliki yang --simulate/ --dry-run/ --no-act(dalam kasus installAnda perlu juga --no-download).

Ini karena tindakan / perintah ini tidak perlu menulis direktori sistem.

Sekarang, mengapa apt-getperlu sudo? Sebenarnya tidak. Anda dapat membuang apt-get, mengunduh paket dengan wgetdan menggunakan dpkg --extractdan mengekstrak paket di direktori apa pun yang Anda suka. Ada juga --instdiryang harus bekerja untuk paket biner saja.

Sekarang, mengapa ini bukan default? Karena itu menyebalkan. Untuk melakukan apa yang Anda inginkan, kami perlu mengemas kembali setiap paket dua kali, satu untuk jalan yang benar, dan satu lagi untuk melakukan apa yang Anda inginkan. Pada build, binari biasanya perlu tahu di mana file dan pustaka yang mereka butuhkan (dalam beberapa kasus, ini adalah hardcoded saat dikompilasi).

Sekarang, apa yang bisa Anda lakukan? Hanya chroot beberapa lingkungan a la virtualenv, di mana Anda dapat menginstal paket tanpa root.

Singkatnya, ini bukan cara apt-get dimaksudkan untuk digunakan, dan saya tidak tahu manajer paket lain yang mirip dengan apt-get yang memungkinkan Anda untuk melakukan itu. Pada akhirnya, apt-gethanya sebuah front-end ke dpkg yang dapat melakukan beberapa hal ini.

Braiam
sumber
3

Informasi dalam paket itu sendiri menentukan di mana file akan diinstal, jadi Anda perlu sudomenulis /dan mengubah database paket.

Ketika Anda menginstal paket, Anda menginstal file biner pra-dibangun dan konfigurasi terkait dan file meta dan skrip yang merupakan bagian penting dari paket. Skrip dan file konfigurasi ini terkait erat dengan dependensi dan sistem lainnya. Anda tidak ingin mengubahnya dengan ringan kecuali Anda tahu persis apa yang Anda lakukan.

Jika Anda menggunakan sistem, katakanlah di tempat kerja, di mana Anda tidak memiliki sudoakses, Anda dapat mengkompilasi dari sumber dan mengatur direktori instalasi ke rumah Anda. Maka, tidak perlu untuk sudo. Ketika Anda menginstal dari sumber, Anda biasanya tidak mengubah basis data paket.

chaskes
sumber
Terimakasih telah menjawab! Saya tahu dan menggunakan solusi, tapi apa yang saya coba cari tahu adalah mengapa saya menggunakannya. Saya yakin Anda mengatakan bahwa masalahnya adalah bahwa jalur instal dikodekan oleh pengelola paket - mengapa ini tidak dapat diubah?
PattimusPrime
2

Itu bukan pertanyaan bodoh.

Level privilege dalam sistem operasi

Ubuntu - dan memang sistem operasi modern - memiliki konsep tingkat hak istimewa yang berbeda untuk perangkat lunak yang berbeda. Perangkat lunak yang diprakarsai oleh pengguna biasanya berjalan di bawah tingkat hak istimewa berbasis pengguna, yang karena alasan keamanan tidak memiliki akses yang diperlukan untuk memodifikasi sistem - hanya dapat memodifikasi file milik pengguna tersebut.

Untuk melakukan modifikasi pada sistem operasi yang dapat berdampak pada sistem secara keseluruhan, bukan hanya file pengguna, diperlukan tingkat hak istimewa yang lebih tinggi, yang di Linux disebut sebagai hak "superuser" (atau umumnya disebut "root"). Level privilege ini memiliki akses tanpa batas ke seluruh sistem operasi yang memungkinkannya untuk memodifikasi - atau menghancurkan - semua file untuk semua pengguna.

Peran apt-get

Ketika Anda menginstal perangkat lunak melalui apt-get, Anda menginstal perangkat lunak yang akan tersedia di seluruh sistem . Artinya, perangkat lunak tidak hanya akan ditempatkan di direktori home pengguna untuk dijalankan oleh pengguna itu saja, tetapi akan diinstal dalam direktori aplikasi sistem-luas (seperti di / usr, / etc, / var dan sebagainya ) untuk dijalankan oleh semua pengguna. Untuk memodifikasi direktori ini, Anda memerlukan hak superuser. Tidak ada pengguna yang tidak memiliki hak yang dapat mengubah direktori ini, karena jika tidak perangkat lunak yang tidak berhak dapat mengacaukan sistem.

Jika Anda mencoba menginstal sesuatu menggunakan apt-get tanpa memberikan hak istimewa pengguna super apt-get, rintangan pertama yang akan gagal diatasi adalah untuk mendapatkan kunci untuk menulis ke katalog perangkat lunak sendiri. Menjadi utilitas di seluruh sistem, apt-get mengelola katalog perangkat lunak yang diinstal, yang secara alami membutuhkan hak pengguna super untuk mengedit sehingga perangkat lunak yang tidak memiliki privasi tidak dapat mengacaukannya. Tetapi bahkan jika Anda entah bagaimana dapat mengatasi rintangan ini (misalnya, dengan mengubah izin file), banyak langkah lebih lanjut di sepanjang cara menginstal perangkat lunak akan tetap gagal, karena rutin instalasi akan tergantung pada penulisan ke beberapa direktori sistem.

Menggunakan Linux dimungkinkan untuk menginstal perangkat lunak tanpa hak pengguna super, tetapi Anda perlu menulis sendiri (mis., Skrip shell) atau mengkompilasinya sendiri dan menjalankan executable yang dikompilasi secara langsung. Lebih mudah hanya menginstalnya di seluruh sistem menggunakan apt-get (dan utilitas berbasis APT lainnya seperti aptitude, synaptic, atau pusat perangkat lunak Ubuntu) jika Anda memiliki akses untuk melakukannya.

thomasrutter
sumber
Terima kasih telah menjawab, dan terima kasih atas ketelitiannya. Saya mengerti sifat sistem-apt, tapi apa yang saya coba pahami adalah mengapa harus seperti itu.
PattimusPrime
1
Tidak harus seperti itu. Kebetulan saja cara Ubuntu (dan Debian) dirancang. Tidak akan ada yang menghentikan seseorang mendesain sistem operasi di mana cara normal menginstal perangkat lunak adalah per-pengguna.
thomasrutter
1

Mengapa apt-get menginstal ke / (atau serupa) direktori secara default?

Alasan sederhana untuk ini adalah apt-gettidak memutuskan di mana menginstal perangkat lunak. Diputuskan oleh pengembang dan dikodekan di dalam aplikasi itu sendiri.

Bisakah saya menginstal ke direktori lain?

Ya, Anda dapat menginstal ke direktori lain. Untuk perangkat lunak open source, dapatkan sumbernya, ubah direktori instalasi, kompilasi, bangun dan instal. Biasanya ada opsi untuk configureskrip yang disertakan yang memungkinkan Anda menentukan tempat untuk menginstal. Ini biasanya --prefix.

Tapi saya bersikeras menggunakan apt-get. Apa yang harus dilakukan sekarang?

BAIK. Masih ada cara untuk melakukan ini dengan apt-get, meskipun itu akan terlalu banyak untuk pengguna akhir. Ikuti langkah-langkahnya.

  1. Dapatkan sumbernya.
  2. Ubah direktori instalasi menjadi sesuatu seperti $HOME.
  3. Kompilasi dan bangun.
  4. mengemasnya menjadi file deb .
  5. Buat akun launchpad.
  6. Tanda tangani kode etik ubuntu (saya tidak yakin apakah ini diperlukan).
  7. buat ppa untuk diri sendiri .
  8. Unggah paket deb ke ppa.
  9. tambahkan ppa ke sumber Anda.
  10. Lari sudo apt-get update.
  11. Lari apt-get install package.

Itu terlalu mudah / sulit. Apakah mungkin untuk memilih direktori selama instalasi?

Iya dan tidak.

Ya karena itu mungkin, beberapa perangkat lunak menggunakan metode ini, satu-satunya yang saya tahu adalah Qt5. Ia memiliki file .run yang, ketika dijalankan meminta direktori instalasi di antara banyak input lainnya.

Tidak karena metode ini tidak digunakan apt-get.

Bisakah saya melakukan ini dengan mudah suatu hari nanti apt-get?

Saya tidak berpikir pengembang apt-getdan / atau pengembang perangkat lunak akan tertarik untuk melakukan ini, tetapi beberapa perangkat lunak dapat dikembangkan yang akan melakukan sumber, mengubah, mengkompilasi, membangun, menginstal langkah-langkah secara otomatis dengan hanya meminta direktori instalasi.

Indera ke-6 saya memberi tahu saya bahwa perintahnya adalah

apt-dont-get install pkg1 pkg2 ...
Pengguna Terdaftar
sumber
Terima kasih atas jawabannya - lengkap dan menjawab pertanyaan saya. Namun saya tidak mengerti mengapa tidak ada minat untuk mengembangkan fungsionalitas pengguna tunggal menjadi apt-get. Sepertinya fungsionalitas akan sangat berguna dalam kasus penggunaan tertentu.
PattimusPrime
Info bagus, tapi format T&J dalam T&J ...? :) Idk, mungkin Anda harus mengedit ke format standar? Hanya pemikiran saja.
chaskes
@ PattimusPrime Kasus-kasus seperti itu sebagian besar jarang terjadi, karena dalam kebanyakan kasus admin menginstal semua perangkat lunak yang diperlukan & orang lain tidak perlu menginstal perangkat lunak. Juga fakta bahwa membangun dari sumber sangat mudah & bahwa menerapkan fungsi seperti itu akan sia-sia selama pengembang perangkat lunak tidak menerapkannya di sana, perangkat lunak mereka sendiri akan menghentikan apt-getpengembang untuk melakukannya. Juga, banyak program yang ada tergantung pada program lain dan mereka mencarinya di direktori / usr. Menerapkan fungsi seperti itu akan membutuhkan perubahan di semua perangkat lunak yang ada yang memiliki dependensi (ini tidak berlaku dalam ribuan).
Pengguna Terdaftar
Merupakan pelanggaran kebijakan Debian untuk menginstal file dalam $ HOME. Anda seharusnya tidak pernah melakukan itu. Jika ada, gunakan /opt/packagedan chmod direktori sebagai gantinya.
Braiam
@Braiam: Saya telah melihat orang merekomendasikan menginstal paket $HOME/opt/jika mereka tidak memiliki hak istimewa untuk menginstal paket masuk /opt/..
Aditya
-1

Karena itu mengedit file yang chmodded sehingga Anda tidak dapat menggunakannya. Anda mungkin dapat chmod mereka sehingga Anda tidak bisa merekomendasikan saya melakukannya

Raring
sumber
Terimakasih telah menjawab. Saya mencari mengapa hanya mengedit file chmodded. Menurut saya fungsionalitas pengguna-tunggal akan mudah diimplementasikan dan sangat bermanfaat di beberapa area (mis. Cluster superkomputer)
PattimusPrime